我花了很多時間弄清楚如何配置我的WCF服務,以便它們可以在生產環境中用於https。如何在一個web.config中將http和https的WCF服務配置組合在一起?
基本上,我需要做的是:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
添加bindingNamespace
屬性端點,使得它的工作的最後一件事。
但是,此配置不工作在我在常規http下工作的本地開發環境中。所以,我的配置有:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
的這裏的區別是,我已經設置了httpsGetEnabled
屬性設置爲false,和我刪除了bindingConfiguration和bindingNamespace。
問題是:如何創建一個處理BOTH的配置塊?
我真的很討厭每次發佈時都要對配置進行大量的特殊修改。是的,我知道我可以有一個後期構建任務,可以自動更改這些值,但如果可能的話,我想合併這些配置。
我想是這樣的:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
我計算過,把兩個端點想給它兩個選項看起來激活服務時。但是,這不起作用。我收到此錯誤:
無法找到與具有綁定BasicHttpBinding的端點匹配scheme https的基地址。註冊的基地址方案是[http]。
從環顧SO和其他互聯網,看起來其他人都有問題殺死這條龍。
你在IIS託管你的WCF服務,還是你自己託管? – 2010-12-03 15:55:16
它們作爲.svc文件託管在ASP.NET Web應用程序中。在dev和prod上使用IIS7。 – sohtimsso1970 2010-12-03 16:25:38
@ sohtimsso1970:你找到了解決辦法嗎? – Learner 2014-03-25 11:18:39