Сбой соединения клиент / сервер WCF tcp.net "Требуется безопасность потока" - PullRequest
2 голосов
/ 17 мая 2010

Я пытаюсь протестировать простое приложение клиент / сервер WCF tcp.net. Служба WCF размещается в Windows 7 IIS. Я включил TCP.net в IIS. Я предоставил либеральным привилегиям безопасности приложение-службу, настроив пул приложений с правами администратора и настроив приложение-службу IIS для запуска в контексте.

Я включил трассировку в сервисном приложении для устранения неполадок. Всякий раз, когда я запускаю простой вызов метода для службы из клиентского приложения WCF, я получаю следующее исключение:

"Потоковая безопасность требуется на http://www.w3.org/2005/08/addressing/anonymous,, но контекст безопасности не был согласован. Это, вероятно, вызвано тем, что удаленная конечная точка пропустила StreamSecurityBindingElement из своей привязки."

Вот моя конфигурация клиента:

<bindings>
  <netTcpBinding>
    <binding name="InsecureTcp">
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>

Вот моя конфигурация сервиса:

<bindings>
  <netTcpBinding>
    <binding name="InsecureTcp"  >
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>

<services>
  <service name="OrderService" behaviorConfiguration="debugServiceBehavior">
    <endpoint
        address=""
        binding="netTcpBinding"
        bindingConfiguration="InsecureTcp"
        contract="ProtoBufWcfService.IOrder" />
  </service>
</services>

<behaviors>

  <serviceBehaviors>
    <behavior name="debugServiceBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>

  </serviceBehaviors>
</behaviors>

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

WCF не любит небезопасную связь - по умолчанию он хочет использовать безопасные и безопасные каналы связи. Режим безопасности по умолчанию для netTcpBinding - это транспортный уровень безопасности с учетными данными Windows. Можете ли вы использовать это значение по умолчанию вместо того, чтобы выключать все ??

Если ваш сервер и все вызывающие его клиенты находятся в одной локальной сети компании, за брандмауэром, то нет смысла не использовать учетные данные Windows. Для этого используйте эту конфигурацию привязки:

<bindings>
  <netTcpBinding>
    <binding name="InsecureTcp">
      <security mode="Transport">
         <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

Эта функция безопасности очень быстрая, часто реализуется аппаратно на вашей сетевой карте, и использование учетных данных Windows внутри организации, как правило, является лучшим способом.

Так почему же вы отключили все средства безопасности на netTcpBinding и попали в эту проблему?

0 голосов
/ 27 апреля 2011

Macr_s ответ работает для Windows 2008.

Обратите внимание, что при попытке выполнить вышеперечисленное в локальной / разрабатываемой Windows 7 все будет работать без безопасности.

Пожалуйста, не изменяйте пул приложений, оставьте пул приложений по умолчанию, он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...