ASP.NET MVC 4.5调用跨解决方案WCF,如何调试WCF服务?
调试跨解决方案WCF服务的几种实用方法
刚接触新项目+WCF的时候,跨解决方案调试确实容易踩坑,我来给你分享几个亲测有效的方法,帮你搞定断点调试:
方法1:同时附加多个进程到Visual Studio调试器
其实VS完全支持同时附加多个进程,你之前可能没注意到操作步骤:
- 先分别启动两个解决方案的服务:
- 打开
Projects解决方案,启动ASP.NET MVC项目(确保它正常运行,对应的进程是w3wp.exe或iisexpress.exe,取决于你用本地IIS还是IIS Express) - 打开
ProjectService解决方案,启动WCF服务项目(同样会生成对应的w3wp.exe或iisexpress.exe进程)
- 打开
- 打开调试菜单(或按
Ctrl+Alt+P)调出「附加到进程」窗口 - 在进程列表里,按住
Ctrl键同时选中ASP.NET和WCF对应的两个进程(如果是IIS Express,每个站点会有独立的iisexpress.exe实例,注意区分) - 点击「附加」按钮,然后在WCF的
FindProjects()方法里设置断点,当ASP.NET发起调用时,断点就会触发啦
方法2:临时合并解决方案(简化调试流程)
如果觉得附加进程太繁琐,可以临时把WCF项目加入到ASP.NET的解决方案中:
- 打开
Projects解决方案,右键点击解决方案名称 → 「添加」→ 「现有项目」 - 找到
ProjectService解决方案里的WCF项目文件(.csproj),添加进来 - 删除ASP.NET项目中原来的WCF服务引用,右键ASP.NET项目 → 「添加」→ 「引用」→ 「项目」,选中刚添加的WCF项目,用项目引用替代服务引用
- 现在直接启动ASP.NET项目,WCF代码里的断点会自动命中,调试起来和单个解决方案的项目一样顺畅。调试完成后,再改回原来的服务引用即可。
方法3:启用WCF跟踪日志(辅助排查调试问题)
如果前面的方法还是没触发断点,可以开启WCF的跟踪日志来排查调用链路:
在WCF项目的Web.config中添加以下配置(记得先创建c:\logs目录,或者修改日志路径):
<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\WcfTrace.svclog" /> </listeners> </source> </sources> </system.diagnostics>
运行调用后,用Visual Studio打开生成的.svclog文件,就能看到完整的WCF调用流程,帮你定位断点没触发的原因(比如是否真的调用到了预期的WCF服务)
额外注意事项
- 确保WCF项目的调试开关已开启:右键WCF项目 → 「属性」→ 「Web」→ 勾选「启用ASP.NET调试」
- 如果使用IIS Express,两个项目的端口要设置为不同值,避免端口冲突
- 断点一定要设置在WCF的实现代码(
ProjectSearch.svc.cs的FindProjects()方法)里,而不是服务接口定义中
内容的提问来源于stack exchange,提问作者john.1020
相关产品推荐
相关产品推荐

