在IIS中发布WCF服务,同时支持HTTP和HTTPS

时间:2011-01-15 21:14:11

标签: wcf http iis https

我有一个使用webHttpBinding配置了两个端点的WCF服务,一个用于http,另一个用于https。它们使用相同的地址,端点只是根据使用的协议而不同:

<services>
<service name="Blubb.ClientService">
<endpoint binding="webHttpBinding" bindingConfiguration="webBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/>
<endpoint binding="webHttpBinding" bindingConfiguration="sslWebBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/> </service>
<services>

使用以下行为和绑定:

<behaviors>
<endpointBehaviors>
<behavior name="webBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="webBindingConfig">
<security mode="None"/>
</binding>
<binding name="sslWebBindingConfig">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>

当我在IIS 6上安装证书时,两个端点都能正常工作。

未安装证书时,HTTPS端点当然不起作用。但是HTTP-Endpoint也不起作用。它失败了一个令人恼火的例外:当我使用http://localhost:8080/ClientManagement/ClientService.svc/GetPackageInfo访问服务时,例外是:

Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].

这令人恼火,因为我没有请求HTTPS-URL。

现在,当我将服务拆分为两个时,HTTP-Access也适用于未安装SSL证书的IIS:

<services>
<service name="Blubb.ClientService"> <endpoint binding="webHttpBinding" bindingConfiguration="webBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/>
</service>
<service name="Blubb.ClientServiceSecure">
<endpoint binding="webHttpBinding" bindingConfiguration="sslWebBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/>
</service>
</services>

现在的问题是客户端必须使用两个不同的端点,而不仅仅是更改协议。我们有一个系统,客户可以通过我们的配置工具打开SSL,具体取决于他们的安全需求。但我不想强迫他们更改WCF服务的web.config。

0 个答案:

没有答案