В настоящее время мы переносим службу 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?