在同一服务上启用http和https
本文关键字:http https 启用 服务 | 更新日期: 2023-09-27 18:19:09
我正在编写一个包含单个合约的WCF服务。我希望web客户端使用http或https调用服务端点。
我的网页。配置如下:
(为简洁起见,删除了部分内容)
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDataService" />
<binding name="BasicHttpsBinding_IDataService" >
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="DataServiceMetadataBehavior" name="DummyService.DataService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataService"
contract="DummyService.IDataService"/>
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="BasicHttpsBinding_IDataService"
contract="DummyService.IDataService" name="BasicHttpsBinding_IDataService"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DataServiceMetadataBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" />
<add scheme="https" binding="basicHttpBinding" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
当我尝试使用VisualStudio测试客户端测试服务时,它给出了以下错误:
无法找到与方案https匹配的基地址端点绑定BasicHttpBinding。注册基地地址[http].
端点由地址、绑定和契约组成。http://YourBaseAddress/YourApp/YourService.svc
和httpS://YourBaseAddress/YourApp/YourService.svc
是不同的地址,具有不同的模式名称或协议以及不同的端口:默认情况下为80和443,因此您可以为服务拥有两个端点,具有相同的basicHttpBinding,前提是https具有用于SSL传输的bindingConfiguration,正如您所做的那样。错误信息是非常有用的,所以你需要去IIS(或IIS Express),以确保有一个http监听器,说https绑定后,检查网站的"编辑绑定"功能定义。这样做之后,您应该能够在Web浏览器中通过httpS://YourBaseAddress/YourApp/YourService.svc?wsdl
获取WSDL。
事实上,许多Web服务/应用程序,比如来自Microsoft和Google的服务/应用程序,通过相同的主机名和路径同时支持http和https。