在C#中调试Web服务代理类

时间:2012-02-17 12:49:40

标签: c# web-services

在我的项目中,我创建了一个具有Web服务的Web应用程序。在同一解决方案中,我添加了另一个Web应用程序。我正在使用此应用程序中的Web服务。我使用Web引用选项添加了Web引用添加了Web引用。我想调试生成的代理类(当我添加Web引用时)。我在代理类中放了一个调试器,但它没有用。然后我复制了代理类并在客户端web应用程序中创建了一个具有相同相同和相同内容的新类,并删除了Web引用。但我仍然无法调试代理类。我该如何调试代理类? 请帮忙。

8 个答案:

答案 0 :(得分:19)

尝试从生成的代码中删除[DebuggerStepThroughAttribute()]

答案 1 :(得分:7)

在Visual Studio 2010中,您可以设置断点(您显然已经尝试过)。但是,通过右键单击您的应用程序选择调试并单击new start new instance来尝试运行Web服务解决方案。

调试刚好低于设置为启动项目选项

答案 2 :(得分:6)

我通常这样做的方式是在本地托管IIS中的客户端应用程序和webservice托管应用程序。您应该有两个应用程序虚拟目录。为每个应用程序使用单独的应用程序池。当从客户端应用程序向Web服务应用程序发出成功请求时,应该有两个工作进程(w3wp.exe进程)。您应该能够将调试器附加到正确的w3wp进程以进行调试。

答案 3 :(得分:4)

Visual Studio 2008 \ 2010:

  1. 在您的网络服务应用程序中设置<compilation debug="true">

  2. 转到工具\选项,然后转到调试\常规,取消选中启用我的代码(仅管理)

  3. 在代理类中设置断点(对于Web服务,在Invoke上设置一个断点,在返回行上设置另一个断点)

    像往常一样调试。

    如果您看到步入请求导致属性或操作员自动转发,请按照说明操作(右键单击该行,取消选中“跳过属性和操作符”或“步骤”特定的...“)。

    enter image description here

答案 4 :(得分:3)

你试过这个功能吗? System.Diagnostics.Debugger.Launch();

使用上面的函数代替调试器,这可能会解决您的问题。

例如你想调试一个函数test()

public bool test()
{
System.Diagnostics.Debugger.Launch();
//..put it on top of the function
}

答案 5 :(得分:2)

在进行Web服务调用之前设置断点,然后Step Into(F 11)Web服务调用本身。进入Web服务后,您可以在任何地方设置更多断点。

答案 6 :(得分:2)

作为其他答案的补充,您也可以右键单击解决方案并选择“设置启动项目...”

在Common Properties / Startup Project下,选择“Multiple startup projects:”的单选选项,然后选择Action“Start”。

现在调试应该在每次运行时都在两个项目中启动调试器。

答案 7 :(得分:1)

添加您的代码(在c#中):

System.Diagnostics.Debugger.Launch();

检查您是否将项目构建为“解决方案配置:调试”。