WsHttpBinding с режимом безопасности TransportWithMessageCredential в IIS 7 не работает - PullRequest
1 голос
/ 03 июня 2010

В настоящее время мы переносим службу WCF из IIS 6 в IIS 7. Служба содержит некоторые конечные точки, отличные от SSL, для целей внутренней потоковой передачи, а некоторые открытые конечные точки защищены SSL.

Общедоступные, защищенные конечные точки реализуются с использованием wsHttpBinding и security mode = "TransportWithMessageCredential". Привязка гласит:

<wsHttpBinding>
  <binding name="CustomSecurityBinding">
    <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" />
    </security>
  </binding>
</wsHttpBinding>

Учетные данные аутентифицируются в пользовательском хранилище для проверки.

После развертывания службы в IIS 7 (64-разрядная версия Win2k8) все службы (basicHttpBindings) отвечают правильно, ожидайте наличия wsHttpBindings. Если запущено с использованием https, мы всегда получаем код состояния HTTP 400 (неверный запрос).

После включения трассировки в IIS мы могли бы сузить проблему, хотя сообщение от трассировки не очень помогло:

MODULE_SET_RESPONSE_ERROR_STATUS Warning
ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER",
HttpStatus="400", HttpReason="Bad Request", HttpSubStatus="0", ErrorCode="Der
Vorgang wurde erfolgreich beendet. (0x0)", ConfigExceptionInfo="" 

Шаги, сделанные на данный момент:

  • переустановленные расширения WCF в IIS 7 (ServiceModelReg.exe -r -y)
  • включен протокол https для хоста, добавлен самозаверяющий сертификат для хоста
  • поигрался с настройкой dns / identity в конфигурации wcf
  • добавлен базовый адрес в конфигурацию службы wcf

После 2 часов поиска в Google и попыток сделать эту работу я прошу вас в качестве последней надежды: кто-нибудь знает это странное поведение IIS 7?

1 Ответ

2 голосов
/ 03 июня 2010

Проверено ли, что привязка SSL настроена в applicationHost.config (% windir% \ system32 \ inetsrv \ config \ schema \ IIS_Schema.xml) и что хранилище HTTP.sys содержит действительный сертификат и имя хранилища длясвязывание?Во-вторых, истинная ошибка может быть замаскирована ошибкой 400. Вы пытались изменить wsHttpBinding в конфигурации, чтобы увеличить maxBufferPoolSize и maxReceivedMessageSize до некоторых чрезвычайно высоких значений и посмотреть, продолжается ли это?

...