WCF部署后添加服务引用报415错误:客户端与服务绑定不匹配如何解决?
问题原因
这个415错误核心是服务端与客户端绑定配置不匹配:本地测试时服务用的是HTTP协议,对应basicHttpBinding,默认请求内容类型为text/xml;部署到服务器后服务走HTTPS协议,你服务端配置里已经通过protocolMapping指定HTTPS协议使用basicHttpsBinding,但客户端配置还停留在本地HTTP测试的状态,绑定类型和服务地址都没有对应更新,请求内容类型不匹配就触发了报错。
解决步骤
- 优先选择自动更新服务引用:在客户端项目的「服务引用」列表里找到对应的WCF引用,右键选择「更新服务引用」,输入服务器上的HTTPS服务地址
https://www.tcs-ksa.net:1204/shm-dev/Service1.svc,Visual Studio会自动拉取服务端配置生成匹配的客户端绑定代码,不需要手动改配置。 - 如果自动更新失败,可手动修改客户端配置文件,修改后的参考如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <system.serviceModel> <bindings> <basicHttpsBinding> <binding name="BasicHttpsBinding_IService1" /> </basicHttpsBinding> </bindings> <client> <endpoint address="https://www.tcs-ksa.net:1204/shm-dev/Service1.svc" binding="basicHttpsBinding" bindingConfiguration="BasicHttpsBinding_IService1" contract="ServiceReference1.IService1" name="BasicHttpsBinding_IService1" /> </client> </system.serviceModel> </configuration>
- 如有需要同时支持HTTP和HTTPS访问,可在服务端配置的
protocolMapping节点下新增HTTP协议的绑定配置:
<protocolMapping> <add binding="basicHttpsBinding" scheme="https"/> <add binding="basicHttpBinding" scheme="http"/> </protocolMapping>
修改完成后先在浏览器访问服务器的服务地址,确认能正常打开WCF服务的默认说明页面,再运行客户端测试即可。
内容的提问来源于stack exchange,提问作者Hasan Shouman
相关产品推荐
相关产品推荐

