使用http和https绑定/端点部署WCF服务

Zan*_*son 26 iis ssl https wcf wcf-binding

我已经编写了一个WCF Web服务供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>
Run Code Online (Sandbox Code Playgroud)

然而不幸的是,这有一个问题.

此Web服务需要部署到数百个客户的服务器上,并非所有服务器都使用https.将其部署到未在IIS中设置https绑定的服务器会导致其失败.如果在IIS中没有设置https绑定,是否有办法在web.config中默认使用这两种绑定而不会死亡?

我们已经找到了解决此问题的可能方案,但它并不能很好地满足我们的部署要求.

之前有没有其他人遇到这样的事情,你是怎么解决的?

Zan*_*son 10

最后,我们决定使用configSource属性为web.config的绑定,行为和服务部分使用外部文件,如下所示:

<bindings configSource="bindings.config" />
<behaviors configSource="behaviors.config" />
<services configSource="services.config" />
Run Code Online (Sandbox Code Playgroud)

这样,我们默认将其部署为仅为http访问设置的外部文件,并向客户提供有关如何编辑外部文件以设置https访问权限的说明(或协助他们).这也允许我们将未来的更改部署到web.config本身,而不会覆盖外部配置文件.


Kri*_*ran 10

如果您不使用安装程序,则此页面上接受的答案没有多大用处.正确的答案在于OP自己稍后编辑,所有人需要做的是绑定IIS中的http和https端口,然后使用下面的配置.

            <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>
Run Code Online (Sandbox Code Playgroud)

这对我来说很好!