Привязка службы WCF с использованием allowInsecureTransport = true приводит к сбою ссылки на службу обновления в клиенте - PullRequest
1 голос
/ 19 сентября 2010

Это моя конфигурация сервиса в web.config:

<binding name="statefulSessionWithUsernameOverTransport">
  <security authenticationMode="SecureConversation"
    requireSecurityContextCancellation="False" allowInsecureTransport="True">
    <secureConversationBootstrap authenticationMode="UserNameOverTransport"/>
  </security>
  <binaryMessageEncoding />
  <httpTransport />
</binding>

<service name="com.example.FooService"
  behaviorConfiguration="usernamePasswordAuthBehavior">
  <endpoint contract="com.example.FooService.IFooService"
    address="custom" binding="customBinding"
    bindingConfiguration="statefulSessionWithUsernameOverTransport" />
</service>

Я устанавливаю allowInsecureTransport = True, потому что в производственном режиме служба будет работать за балансировочным ограничителем нагрузки SSL.Вызов службы из моего клиента .Net 4.0 работает без проблем, но попытка обновить ссылку на службу в VS2010 всегда приводит к ошибке:

System.ServiceModel.Channels.TransportSecurityBindingElement Ошибка: сбой экспорта политики безопасности,Привязка содержит TransportSecurityBindingElement, но нет элемента привязки безопасности транспорта, который реализует ITransportTokenAssertionProvider.Экспорт политики для такого экспорта политики не поддерживается. *

Я понимаю, что он пытается мне сказать - в основном это то, что я отключил транспортную безопасность для привязки, которая требует его, чтобы избежать компрометацииучетные данные путешествуют по проводам.Но в этом и заключается смысл allowInsecureTransport .Может ли быть так, что прокси-генератор просто не знает об этом атрибуте?

Обновление:

Похоже, что генератор wsdl действительно не может справиться с атрибутом.Мне пришлось вернуться к уровню безопасности сообщений и самоподписанному сертификату для разработки.Преимущество использования Message Security заключалось в том, что он мог использовать Cassini for Development вместо полноценного IIS.

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Я столкнулся с этой же проблемой.Кажется, что проблема заключается в http-транспорте, потому что он не реализует интерфейс ITransportTokenAssertionProvider, а https делает.Мне удалось обойти это двумя способами: переключить свою настраиваемую привязку на использование транспорта https, которая реализует интерфейс, и добавить enableUnsecuredResponse = "true" к элементу безопасности в конфигурации, или написать настраиваемую привязку, полученную из HttpTransportBindingElement, но реализующуюнеобходимый интерфейс.

1 голос
/ 19 сентября 2010

Я читал об этом несколько раз (например, здесь или здесь ), но я никогда не пробовал.Это похоже на ошибку в экспорте WSDL, потому что когда вы настраиваете службу и клиента вручную, это должно работать, но экспорт метаданных не работает.Вторая ссылка предлагает какой-то обходной путь, но он уродлив.

Мое предложение состоит в том, чтобы разработать с параметром allowInsecureTransport, установленным в false, и HTTPS с тестовым сертификатом, и переключать эту конфигурацию при развертывании приложения (может быть частью пакета установки).

0 голосов
/ 02 декабря 2012

Я столкнулся с подобной проблемой.Я установил исправление для .NET Framework 3.5 на клиентских машинах, и после этого оно заработало.

...