WCF SSL с пользовательской привязкой - PullRequest
3 голосов
/ 15 июля 2009

Кто-нибудь когда-нибудь пытался использовать пользовательское связывание с SSL в веб-сервисе WCF? Я видел несколько примеров того, как это сделать с помощью basicHttpBinding и wsHttpBinding, но для customBinding всегда происходит сбой. В частности, то, с чем я сейчас работаю (самая удачная конфигурация из всех возможных) выглядит примерно так:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    </serviceHostingEnvironment>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <customBinding>
        <binding name="binaryHttps">
          <binaryMessageEncoding />
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <host>
          <baseAddresses>
            <add baseAddress="https://(myserver)/"/>
          </baseAddresses>
        </host>
        <endpoint address=""
      binding="customBinding" bindingConfiguration="binaryHttps"
      contract="MyService" />
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

Это на самом деле позволяет нам получить доступ к сервису из Интернета, получить его WSDL и добавить ссылку на сервис в Visual Studio, но когда мы на самом деле пытаемся использовать его вживую в нашем приложении silverlight-3, он просто сидит там бесконечно, ожидая для ответа и никогда не выходит. Это на самом деле приводит к тому, что через некоторое время у меня возникают проблемы с памятью на моей машине (с 6 ГБ памяти). Странно то, что все это работало (и до сих пор работает) идеально в среде разработки (используя строго хосты приложений VS), только когда мы попытались развернуть его на реальном сервере с настоящим сертификатом SSL, все эти проблемы выскочил.

Я довольно исчерпывающе искал решение этой проблемы, но до сих пор ничего не нашел и перепробовал практически все - есть ли кто-нибудь, кто сталкивался с этим раньше и обходил его?

Ответы [ 2 ]

1 голос
/ 16 июля 2009

Получается, что проблема была вовсе не в нашем web.config, а в проблеме с IIS 7 и сертификатами Wildcard SSL.

А именно, IIS 7 не позволяет указывать имя хоста при привязке IP-адреса к SSL-соединению и сертификату. Я предполагаю, что это потому, что он ожидает SSL-сертификат без подстановочного знака, из которого он может извлечь явное имя хоста. В итоге нам нужно было зайти в файл applicationHost.config в {WindowsDir} \ {System32} \ {Inetsrv} \ {config}, найти запись с привязанным IP-адресом нашего веб-сервиса и явно изменить ее на (ip ) :( имя хоста). Затем он даже правильно отображался в графическом интерфейсе конфигурации IIS.

После этого мы должны были полностью отключить все каналы, кроме SSL, на всех наших серверах, и все работало прекрасно.

Слава богу, что все кончено!

0 голосов
/ 15 июля 2009

AFAIK, использование SSL имеет проблемы с производительностью. Мы используем WCF behiovr для аутентификации. Мы используем Silverlight => ASP.NET => WCF. Мы настроили конечную точку в виде как Silverlight, так и WCF. Всякий раз, когда мы вызываем сервис, мы передавали токен для аутентификации.

Вы говорите, что можете использовать пользовательскую привязку в ClientConfig из Silverlight?

...