Привязка услуг WCF Использование AutomInseCurEnransport = True Proses Обновление Ссылка на обслуживание Услуги на клиенте

StackOverflow https://stackoverflow.com/questions/3743288

Вопрос

Это моя конфигурация службы в 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 на клиентах, и он работал после этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top