SMSvcHost.exe 路径不正确导致 WCF 服务不可用

无法识别该 URI 前缀。
元数据包含无法解析的引用:“net.tcp://localhost:8888/LogService”。
已尝试创建到达不支持 .Net 框架的服务的通道。可能遇到 HTTP 终结点。
需要记录类型“PreambleAck”,找到“72”。
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。

前阵子,同事在添加 WCF 服务来进行测试时,抛了上述提示。


找了很久资料没弄明白是什么原因,包括 Net.Tcp Listener Adapter 等几个依赖服务都检查了一遍,都是运行正常。
最后有人提示再检查 Net.Tcp Listener Adapter 几个服务。


看了下服务的进程,Net.Tcp Listener AdapterNet.Pipe Listener Adapter 的进程 PIDNet.Msmq Listener AdapterPID 不一样。
继而查看服务属性,发现 Net.Tcp Listener AdapterNet.Pipe Listener Adapter 可执行文件的路径Net.Msmq Listener Adapter 的不一样。


打开注册表,搜索 SMSvcHost.exe,找到 NetTcpActivatorNetPipeActivator 分支(HKEY_LOCAL_MACHINESYSTEMControlSet001Services),分别修改分支中的 ImagePath 键值为:

%systemroot%Microsoft.NETFramework64 4.0.30319SMSvcHost.exe

重启服务 Net.Tcp Listener Adapter 和 Net.Pipe Listener Adapter,WCF 服务可以正常添加调用。