【发布时间】:2012-01-06 02:35:34
【问题描述】:
我的代码使用了很多 WCF 调用,当我尝试调试它时,它并没有转到服务代码本身。有没有办法以某种方式调试 WCF 代码?
【问题讨论】:
-
你是如何运行 WCF 服务的?在 IIS 内部还是作为独立应用程序?
标签: c# .net wcf visual-studio-2010 debugging
我的代码使用了很多 WCF 调用,当我尝试调试它时,它并没有转到服务代码本身。有没有办法以某种方式调试 WCF 代码?
【问题讨论】:
标签: c# .net wcf visual-studio-2010 debugging
有一个更简单的方法。只需在 Visual Studio 中启动多个进程。右键单击解决方案。单击属性。选择启动项目。单击多个启动项目。将 WCF 和客户端项目设置为 Action=Start。现在您将逐步浏览 WCF 以及客户端。
【讨论】:
您需要将调试器附加到您的 wcf 服务正在运行的进程中。
如果在iis中需要附加到对应的w3p.exe进程。
如果在独立应用程序或 Windows 服务中,请附加到您的 exe 名称。
在 Visual Studio 的调试器菜单上,有一个“附加到进程”。打开相关代码,设置断点,然后调用导致该代码路径执行的服务。
在调试之外,使用具有可切换级别的 .net 跟踪是了解正在发生的事情的好方法。我通常设置 sys internals debugview 以颜色突出显示错误和警告,并在运行代码或测试时不断运行它。工作时我的周边视觉出现彩色线条会发现问题。
【讨论】:
如果您希望跟踪 WCF 活动以查看流量是否以正确的顺序生成,那么我会推荐以下方法之一:
1) 使用fiddler 观察 WCF 流量。
2) 使用 WCF 跟踪侦听器来监视实际的 WCF 调用。这在尝试确定序列化失败的原因时非常有用。您可以通过将以下块添加到 web.config 的配置块来启用此功能:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\WebTrace.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
双击生成的文件将打开 WCF 服务日志查看器,它将为您分析文件并允许您深入了解特定调用并查看发生的实际异常。
【讨论】:
要在 Visual Studio 2010 中调试 WCF 服务,请转到调试 -> 附加到进程。选中“显示所有用户的进程”,如果您使用的是 IIS,则选择 w3p.exe,否则选择应用程序的名称。下断点,调用,然后就可以开始调试了。
如果它是一个 Web 应用程序(我推荐这个),您可以右键单击项目,转到 Web 选项卡,然后在开始操作下选择“不打开页面,等待来自外部应用程序的请求”。保存并关闭此设置,然后按 F5 开始调试。
【讨论】:
附加到服务本身,而不是调用它的代码。
【讨论】:
在运行访问 WCF 服务的应用程序时,通常涉及两个进程
听起来您正在调试客户端进程。为了逐步执行实际的 WCF 服务代码,您需要将 Visual Studio 调试器附加到托管服务的进程并在代码中设置断点。
注意:Visual Studio 可以同时附加到多个进程,因此您可以在同一会话中调试客户端和服务器代码。使用
【讨论】: