VS2015中目标.NET4.0的WCF项目启动报错:端口已被监听
我之前也碰到过类似的情况——明明目标框架还是.NET 4.0,换了VS2015就突然报端口被占用。其实这不是框架本身的问题,而是VS2015的WCF宿主环境(比如测试客户端、IIS Express的默认行为)和VS2010有不少隐性差异,导致旧项目的端口更容易被残留进程或默认配置占用。给你几个具体的排查和解决步骤:
先定位并释放占用端口的进程
首先确认到底是哪个进程占了你的端口。打开命令提示符(建议用管理员权限),运行以下命令:netstat -ano | findstr :808x netstat -ano | findstr :13000把命令里的
808x换成你实际的端口号,找到输出里的PID(最后一列数字)。然后打开任务管理器,找到对应PID的进程结束掉——大概率是之前的WCF测试客户端或者宿主程序没正常退出。如果进程关不掉,用命令强制结束:taskkill /F /PID <你的进程ID>修改WCF配置避免端口冲突
如果每次启动都碰端口占用,直接换个端口或者开启端口共享更省心:- 打开项目的
app.config或web.config,找到TCP端点的配置,把端口换成未被占用的(比如把13000改成13001),同时更新对应的baseAddress:<services> <service name="YourNamespace.YourService"> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:13001/YourService"/> </baseAddresses> </host> <endpoint address="" binding="netTcpBinding" contract="YourNamespace.IYourService"/> </service> </services> - 开启TCP端口共享功能,这样多个WCF服务可以共用同一个端口:
在bindings节点里添加端口共享配置:
注意:这个功能需要开启Windows系统的「Net.Tcp Port Sharing Service」服务(在服务管理器里找到它,设置为自动启动并启动)。<bindings> <netTcpBinding> <binding name="NetTcpBinding_IYourService" portSharingEnabled="true"> </binding> </netTcpBinding> </bindings>
- 打开项目的
调整VS2015的启动配置
VS2015的WCF测试客户端或IIS Express可能有默认的端口绑定冲突:- 右键项目→属性→调试,把启动方式从「WCF测试客户端」改成直接启动项目(如果你的项目是控制台宿主的话),避免测试客户端残留进程。
- 如果是IIS Express托管,找到项目根目录下的
.vs/config/applicationhost.config文件,搜索你的端口号,删除重复的绑定条目,然后重启VS。 - 清理解决方案:右键解决方案→清理,然后手动删除项目的
bin和obj文件夹,重新生成项目,避免旧的编译文件导致的问题。
添加.NET 4.0兼容性配置
虽然目标框架是4.0,但VS2015的运行时环境可能有不同的默认设置,添加以下配置可以强制WCF使用旧的行为模式:
在app.config的system.serviceModel节点下添加:<runtime> <generatePublisherEvidence enabled="false"/> </runtime>这个设置在.NET 4.0中默认是关闭的,但VS2015可能会强制开启,导致启动时的进程权限问题,进而引发端口占用的假象。
排查第三方工具占用端口
有时候不是开发环境的问题,是杀毒软件、防火墙、Docker、虚拟机这类工具占用了端口。可以暂时关闭这些工具,再启动项目试试,确认后再调整这些工具的端口设置。
按照这些步骤排查下来,基本能解决VS2015中.NET4.0 WCF项目的端口占用问题。
内容的提问来源于stack exchange,提问作者Vinay Dwivedi

