基于IIS托管的WCF服务TCP绑定及元数据交换故障排查求助
问题排查与修复步骤
1. 缺失IIS站点的Net.TCP绑定配置
这是IIS托管WCF TCP服务最容易忽略的核心步骤:
- 打开IIS管理器,定位到你的WCF服务所在站点
- 右键站点 → 编辑绑定 → 添加
- 类型选择
net.tcp,绑定信息设置为19099:*(端口对应你配置的19099,星号表示接受所有主机名) - 回到站点高级设置,在「启用的协议」中添加
net.tcp(例如原协议是http,修改为http,net.tcp)
2. Web.Config中的BaseAddress在IIS托管场景下无效
IIS托管时,<baseAddresses>配置不会生效,服务实际地址由站点绑定决定。建议直接删除该节点,避免地址混淆:
修改后的<service>节点示例:
<service name="Company.Namespace.Service" behaviorConfiguration="ServiceBehavior"> <endpoint name="ServiceEndpoint" address="" binding="netTcpBinding" bindingConfiguration="ServiceNetTcpBinding" contract="Company.Namespace.IService"/> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> </service>
3. 元数据地址与站点绑定匹配问题
你尝试访问的元数据地址net.tcp://hostname:19099/Namespace/Company.Service.svc/mex需满足两个条件:
- 站点已正确绑定net.tcp端口19099
hostname能被客户端正常解析(可临时替换为服务器IP测试,排除DNS解析问题)
4. 端口占用与权限检查
- 执行命令
netstat -ano | findstr :19099检查端口是否被其他进程占用,若占用需更换端口或停止占用进程 - 确认Net.Tcp Listener Adapter服务运行正常,默认账户Local Service权限足够,若有特殊权限限制需调整
5. 完善元数据暴露配置
在服务行为中明确启用TCP元数据获取,确保mex端点正常工作:
<behavior name="ServiceBehavior"> <serviceMetadata tcpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior>
完成以上操作后重启IIS站点,再尝试添加服务引用。若仍失败,可查看Windows事件查看器中的WCF日志获取更详细错误信息。
内容的提问来源于stack exchange,提问作者Nanopixel
相关产品推荐
相关产品推荐

