簡體   English   中英

使用http和https綁定/端點部署WCF服務

[英]Deploying WCF Service with both http and https bindings/endpoints

我已經編寫了一個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>

然而不幸的是,這有一個問題。

此Web服務需要部署到數百個客戶的服務器上,並非所有服務器都使用https。 將其部署到未在IIS中設置https綁定的服務器會導致其失敗。 如果在IIS中沒有設置https綁定,是否有辦法在web.config中默認使用這兩種綁定而不會死亡?

我們已經找到了解決此問題的可能方案,但它並不能很好地滿足我們的部署要求。

之前有沒有其他人遇到這樣的事情,你是怎么解決的?

最后,我們決定使用configSource屬性為web.config的綁定,行為和服務部分使用外部文件,如下所示:

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

這樣,我們默認將其部署為僅為http訪問設置的外部文件,並向客戶提供有關如何編輯外部文件以設置https訪問權限的說明(或協助他們)。 這也允許我們將未來的更改部署到web.config本身,而不會覆蓋外部配置文件。

如果您不使用安裝程序,則此頁面上接受的答案沒有多大用處。 正確的答案在於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>

這對我來說很好!

這將由您用於部署服務的安裝程序處理。 它應該是部署兩個端點或僅部署http端點的先決條件(或至少在安裝程序中留下選項)。

您的兩個端點具有相同的URI。 在WCF中不允許這樣做。 您應該能夠指定具有不同綁定的端點,但URI必須不同(即不同的端口號或不同的合同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM