WCF NetPipeActivator报错致net.pipe协议临时禁用,如何修复?
遇到这个问题很常见,本质是ConflictingRegistration报错——意味着有多个进程/服务在争抢同一个net.pipe端点的注册权限,导致NetPipeActivator临时禁用了站点的net.pipe协议。下面是我整理的几个实用修复步骤,按顺序试:
第一步:排查重复的端点注册
先搞清楚到底是谁在抢这个端点。打开管理员权限的命令提示符,运行:netsh http show urlacl输出里找和
net.pipe://Pc4/相关的条目,看有没有其他进程(非SMSvcHost)也注册了这个URL。另外用PowerShell(管理员)运行:Get-NetNamedPipe查看当前存在的命名管道,确认有没有重名的管道导致冲突。
第二步:重启相关服务和进程
很多时候临时冲突重启就能解决:- 按Win+R输入
services.msc,找到Net.Pipe Listener Adapter服务,右键选择「重启」——如果重启失败,先停止再启动。 - 打开任务管理器,找到PID为1724的
SMSvcHost.exe进程,结束任务后,Net.Pipe Listener Adapter服务会自动重启它,或者你手动启动服务也行。
- 按Win+R输入
第三步:检查WCF服务配置的端点唯一性
打开你的WCF服务配置文件(app.config/web.config),重点看:- 所有
<endpoint>节点的address属性,是不是有多个服务用了完全一样的net.pipe://Pc4/地址?如果有,改成带唯一路径的,比如net.pipe://Pc4/MyService1和net.pipe://Pc4/MyService2。 - 检查
<serviceHostingEnvironment>里的multipleSiteBindingsEnabled设置,如果设为true,确认站点的net.pipe绑定没有重复配置。
- 所有
第四步:清理冲突的URL注册条目
如果第一步里用netsh找到了重复的URL注册,用下面的命令删除冲突条目(替换成实际冲突的URL):netsh http delete urlacl url=net.pipe://Pc4/删完之后重启Net.Pipe Listener Adapter服务。
第五步:确认权限配置
SMSvcHost默认用Local Service账号运行,这个账号需要有「创建全局对象」的权限才能注册net.pipe端点:- 按Win+R输入
secpol.msc打开本地安全策略。 - 依次展开「本地策略」->「用户权限分配」,找到「创建全局对象」。
- 右键编辑,把Local Service账号添加进去,保存后重启系统。
- 按Win+R输入
第六步:深挖事件日志找具体冲突源
回到事件查看器,点开这个错误的详情面板,里面的异常消息通常会明确指出是哪个进程/服务导致的冲突——比如可能是某个第三方应用、另一个WCF服务甚至系统服务占用了端点,根据提示去停用或修改那个服务的配置就行。
如果以上步骤都没用,可以试试卸载重装WCF激活组件:打开控制面板->程序->「打开或关闭Windows功能」,找到「WCF服务」,勾选「HTTP激活」和「非HTTP激活」,点击确定后重启系统。
内容的提问来源于stack exchange,提问作者skhurams

