Привязка услуг WCF Использование AutomInseCurEnransport = True Proses Обновление Ссылка на обслуживание Услуги на клиенте
-
04-10-2019 - |
Вопрос
Это моя конфигурация службы в 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>
Я устанавливаю allowinsecuretraNansport = true, потому что в производстве обслуживание будет работать за заканчивающим балансировкой нагрузки SSL. Вызов сервиса от моего клиента .NET 4.0 работает без проблем, но пытается обновить ссылку на обслуживание в VS2010 всегда приводит к ошибке:
System.ServiceModel.Channels.transportsecurityBindenceElement Error: Политика безопасности не удалась. Связывание содержит транспортирующую процедурность, но без транспортировки связывающего элемента, который реализует ITRANSPORTTONASSERTIONPROVIDER. Экспорт политики для такого экспорта политики не поддерживается. *
Я понимаю, что он пытается сказать мне, что в основном, что я отключил транспортную безопасность на привязке, который требует от этого, чтобы избежать компромисса учетных данных, проезжающих через провод. Но - это весь точку allowseCurErtransport.. Отказ Может ли это, что прокси-генератор просто не знает об этом атрибуте?
Обновлять:
Похоже, что генератор WSDL действительно не может иметь дело с атрибутом. Мне пришлось вернуться к безопасности на уровне сообщения и самозагодный сертификат для развития. Использование безопасности сообщений оказало преимущество в том, чтобы быть в состоянии придерживаться кассини для развития вместо того, чтобы идти полным взорванным IIS.
<wsHttpBinding>
<binding name="wshttpDevelopmentBinding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
Решение
Я столкнулся с этой же проблемой. Проблема, по-видимому, является транспортом HTTP, потому что он не реализует интерфейс iTransporttoledsertionProvider, но HTTPS делает. Я смог обойти эти два способа: переключите мою настраиваемую привязку для использования транспортировки HTTPS, который реализует интерфейс и добавить enableunsecuredResponse = "true" на элемент безопасности в конфиге, или написать пользовательский привязку, вытекающий из httptransportbindElement, но реализация Необходимый интерфейс.
Другие советы
Я читал об этом несколько раз (например, здесь или здесь) Но я никогда не пытался это. Это похоже на ошибку в экспорте WSDL, потому что при настройке службы и клиента вручную он должен работать, но экспорт метаданных не работает. Вторая ссылка предлагает какой-то обходной путь, но это уродливый.
Мое предложение состоит в том, чтобы развить с помощью AutomInseCurEnransport, установленным на ложь и HTTPS с сертификатом испытаний и переключить эту конфигурацию при развертывании приложения (может быть частью установочного пакета).
Я столкнулся с подобной проблемой. Я установил горячую исправление для .NET Framework 3.5 на клиентах, и он работал после этого.