Развертывание службы WCF с привязками / конечными точками http и https - PullRequest
25 голосов
/ 25 января 2011

Я написал веб-сервис WCF для использования приложением Silverlight.Первоначально для службы требовалась только базовая HTTP-привязка.Теперь нам нужно развернуть службу для использования как по http, так и по https.Я нашел некоторые настройки для web.config, которые позволяют мне сделать это следующим образом:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="SilverlightFaultBehavior">
        <silverlightFaults />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="CxtMappingWebService.CxtMappingWebServiceBehavior">
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="SecureHttpBinding">
        <security mode="Transport" />
      </binding>
      <binding name="BasicHttpBinding">
        <security mode="None" />
      </binding>
    </basicHttpBinding>
  </bindings>
  <services>
    <service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior">
      <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" />
      <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

К сожалению, однако, есть проблема с этим.

Этот веб-сервис необходимо развернуть на сотнях серверов наших клиентов, и не все из них будут использовать https.Развертывание на сервере, для которого в IIS не установлена ​​привязка https, приводит к сбою.Есть ли способ иметь обе эти привязки в файле web.config по умолчанию, не умирая, если в IIS не установлена ​​привязка https?

У нас есть возможное решение этой проблемы, но оно не совсем соответствует нашим требованиям к развертыванию.

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

Ответы [ 4 ]

10 голосов
/ 01 марта 2011

В конце мы решили использовать внешние файлы, используя атрибут configSource для разделов привязок, поведения и служб файла web.config, например:

<bindings configSource="bindings.config" />
<behaviors configSource="behaviors.config" />
<services configSource="services.config" />

Таким образом, мы развернемэто по умолчанию с теми внешними файлами, которые настроены только для доступа по протоколу http, и содержит инструкции для клиентов (или помогают им) о том, как редактировать внешние файлы для настройки доступа по протоколу https.Это также позволяет нам развертывать будущие изменения в самом файле web.config без перезаписи внешних файлов конфигурации.

9 голосов
/ 22 июля 2016

Принятый ответ на этой странице не очень полезен, если вы не используете установщик.Правильный ответ заключается в последующем редактировании самим OP, все что нужно сделать, это связать оба порта http и https в IIS, а затем использовать приведенную ниже конфигурацию.

4 голосов
/ 26 января 2011

Это будет обработано установщиком, который вы используете для развертывания службы.Это должно быть обязательным условием (или, по крайней мере, оставить параметр в установщике) для развертывания обеих конечных точек или только http.

1 голос
/ 25 января 2011

Две ваши конечные точки имеют одинаковый URI. Это не разрешено в WCF. Вы должны иметь возможность указывать конечные точки с разными привязками, но URI должны быть разными (то есть с другим номером порта или другим контрактом).

...