возникла необъяснимая проблема.
Обновил работающую службу .Net 3.5 WCF до 4.0 и сразу же обнаружил эту ошибку:
" Сообщение с действием 'http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT' не можетобрабатываться в получателе из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть связано либо с несоответствием контракта (несовпадающие действия между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем.имеют одинаковый контракт и одинаковую привязку (включая требования безопасности, например, Message, Transport, None)."
Служба использует wsHttpBinding с использованием TransportWithMessageCredential, Message ClientCredentials = UserName;поэтому он использует SSL для безопасности шифрования сообщений и сервисы членства для аутентификации пользователей.Нам нужна эта конфигурация, потому что наши деловые партнеры будут получать доступ к ней через общедоступный Интернет.Служба сообщает о привязке:
<wsHttpBinding>
<binding name="WSHttpBinding_IManageSCACFI"
closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00"
sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8"
useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32"
maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None"
proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName"
negotiateServiceCredential="true"
algorithmSuite="Default"
establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
Все это выполняется в веб-приложении (виртуальный каталог в IIS7 в Windows Server 2008. Пул приложений был сброшен для использования 4.0 CLR. Проблема возникаетдаже при самом простом методе контракта на обслуживание, который просто возвращает строку.
- Я знаю, что запросы wcf направляются на сервер, потому что мы используем пользовательский поставщик Membershiop, и я подключил егонаписать запись в журнале, когда он проверяет учетные данные, и эта запись журнала создается.
- Я знаю, что это не в коде, потому что весь пакет отлично работает в окне разработки (Windows 7, но и IIS 7,) с точно такими же битами и настройками конфигурации.
- Если я переключусь на Securitymode = "Transport", он будет работать, но, конечно, он будет использовать по умолчанию встроенную безопасность Windows, а не UserName (я непонимаю, почему он это делает, но это так, процесс обслуживания участников не получает удар.)
- У нас естьполностью перестроил весь веб-сайт и веб-приложение с нуля на сервере и все еще испытывает ту же проблему.
- Вышеприведенное сообщение об ошибке также является сообщением в журнале трассировки диагностики WCF, и там нет более подробной информации, чтобы помочь с этим.
Мы стучали вэто безуспешно какое-то время .. Кто-нибудь еще сталкивался с этой проблемой?