SSL WCF с настраиваемой привязкой

Кто-нибудь когда-нибудь пробовал использовать настраиваемую привязку с 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 и добавить ссылку на сервис внутри визуальной студии, но когда мы на самом деле пытаемся использовать его вживую в нашем приложении silverlight-3, он просто сидит там бесконечно, ожидая ответа. и никогда не выходит из строя. На самом деле это в конечном итоге вызывает у меня проблемы с нехваткой памяти через некоторое время на моей машине (с 6 ГБ памяти). Странно то, что все это работало (и продолжает работать) отлично в среде разработки (строго с использованием хостов приложений VS), только когда мы попытались развернуть его на реальном сервере с реальным сертификатом SSL, все эти проблемы выскочил.

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


person user138420    schedule 15.07.2009    source источник


Ответы (2)


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

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

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

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

person user138420    schedule 15.07.2009

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

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

person Michael Sync    schedule 15.07.2009
comment
Что ж, мы выполняем привязку кода в библиотеке Silverlight 3, а не в файле ClientConfig, но да, на локальном компьютере все работало нормально. Только после развертывания не возникло никаких проблем. - person user138420; 15.07.2009
comment
И, просто чтобы подтвердить, мне удалось добиться идеальной работы службы с настраиваемой привязкой на автономном сервере в режиме http, но это не поможет нашему приложению. Проблема проявляется, когда вы пытаетесь перейти на https. - person user138420; 15.07.2009