我正在写一个包含单一合同的WCF服务。我希望Web客户端使用http或https来调用服务端点。
我的web.config如下:
(为简洁起见,部分部分已被删除)
<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]。
只有一个端点,一切正常。
答案 0 :(得分:0)
端点由地址,绑定和合同组成。
http://YourBaseAddress/YourApp/YourService.svc
和httpS://YourBaseAddress/YourApp/YourService.svc
是不同的地址,具有不同的模式名称或协议以及不同的端口:默认情况下为80和443,因此您可以为服务设置两个端点,使用相同的basicHttpBinding,前提是https one具有用于SSL传输的bindingConfiguration,就像您所做的那样。错误消息非常有用,因此您需要转到IIS(或IIS Express)以确保有一个http侦听器,例如在检查网站的“编辑绑定”功能后定义的https绑定。完成后,您应该能够在Web浏览器中通过httpS://YourBaseAddress/YourApp/YourService.svc?wsdl
获取WSDL。
事实上,许多来自Microsoft和Google的Web服务/应用程序都通过相同的主机名和路径支持http和https。