.Net 4.0 WCF со службами членства - PullRequest
2 голосов
/ 12 августа 2011

возникла необъяснимая проблема.

Обновил работающую службу .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. Проблема возникаетдаже при самом простом методе контракта на обслуживание, который просто возвращает строку.

  1. Я знаю, что запросы wcf направляются на сервер, потому что мы используем пользовательский поставщик Membershiop, и я подключил егонаписать запись в журнале, когда он проверяет учетные данные, и эта запись журнала создается.
  2. Я знаю, что это не в коде, потому что весь пакет отлично работает в окне разработки (Windows 7, но и IIS 7,) с точно такими же битами и настройками конфигурации.
  3. Если я переключусь на Securitymode = "Transport", он будет работать, но, конечно, он будет использовать по умолчанию встроенную безопасность Windows, а не UserName (я непонимаю, почему он это делает, но это так, процесс обслуживания участников не получает удар.)
  4. У нас естьполностью перестроил весь веб-сайт и веб-приложение с нуля на сервере и все еще испытывает ту же проблему.
  5. Вышеприведенное сообщение об ошибке также является сообщением в журнале трассировки диагностики WCF, и там нет более подробной информации, чтобы помочь с этим.

Мы стучали вэто безуспешно какое-то время .. Кто-нибудь еще сталкивался с этой проблемой?

...