将HttpsGetEnabled设为false后无法添加或更新WCF服务引用
在禁用httpGetEnabled和httpsGetEnabled时添加WCF服务引用的方法
当关闭httpGetEnabled和httpsGetEnabled后,常规通过HTTP/HTTPS GET方式获取元数据的途径被切断,此时需要通过MEX(元数据交换)端点来获取服务元数据,以下是具体实现步骤:
1. 配置服务端MEX端点
在服务端的web.config或app.config中,为服务添加专门的MEX元数据交换端点,绑定需与服务的安全模式匹配(此处为HTTPS,使用basicHttpsBinding):
<services> <!-- 替换为你的服务类全命名空间 --> <service name="YourServiceNamespace.MyService"> <!-- 原有业务服务端点 --> <endpoint address="" binding="basicHttpsBinding" contract="YourServiceNamespace.IMyService"/> <!-- MEX元数据端点 --> <endpoint address="mex" binding="basicHttpsBinding" contract="IMetadataExchange"/> </service> </services>
注意事项:
service name必须与服务实现类的全命名空间+类名完全一致contract为IMetadataExchange是固定值,用于标识这是元数据交换端点
2. 通过MEX端点添加服务引用
在Visual Studio的「添加服务引用」对话框中,输入MEX端点的完整URL:
https://localhost:44390/MyService.svc/mex
点击「转到」即可正常获取元数据并生成客户端代理。
3. 备选方案:使用SvcUtil工具生成代理
如果不想在开发环境持续开启MEX端点,可使用Visual Studio自带的SvcUtil.exe工具离线生成代理类:
- 打开「Developer Command Prompt for Visual Studio」
- 执行以下命令(替换为你的实际MEX地址):
svcutil.exe https://localhost:44390/MyService.svc/mex /out:MyServiceProxy.cs /config:ClientConfig.config - 将生成的
MyServiceProxy.cs添加到客户端项目,将ClientConfig.config中的配置合并到客户端的web.config或app.config中。
错误原因说明
你遇到的415错误是因为客户端尝试用SOAP 1.2的内容类型(application/soap+xml)请求,但basicHttpsBinding默认使用SOAP 1.1(text/xml),但核心问题是元数据获取被禁用,启用MEX端点后即可同时解决元数据获取和绑定匹配问题。
内容的提问来源于stack exchange,提问作者Asif Ali
相关产品推荐
相关产品推荐

