调试托管在本地IIS中的WCF服务无效

8

我有一个解决方案WCFSampleSolution,其中包含了所有我的项目 - Web服务、客户端和网站。结构如下:

  • WCFSampleSolution
    • C:\WCFSample\Website
    • WCFService
    • WCFWebClient

我为我的服务创建了WCFService项目。它包含IService1.cs和Service1.cs。然后,我将服务托管在IIS中。我通过创建一个网站并向网站项目添加.svc和web.config文件来完成这个过程。然后在IIS中发布它。当我运行http:\MyMachineName\Website\Service.svc时,它会显示服务描述。然后我创建了调用Web服务的Web客户端。我使用服务引用来添加服务。它调用了Service1的一个方法。它可以正常工作。但是我无法调试这个程序/设置。我验证了WCFWebClient项目和Website项目中的配置文件,它们都有正确的调试设置。

<compilation debug="true">

我设置了断点,但控制权从未到达我的Web服务。我还尝试了附加进程,但它也不起作用。但是,我能够调试我的另一个WCF项目之一。设置有些不同。在那个项目中,我复制了.svc文件和配置到我的Web客户端,调试工作正常。
请帮忙!
3个回答

9
你正在IIS上托管你的服务,所以我相信你一定会附加到w3wp.exe进程。如果VS内置的Web服务器在启动时,请同时附加到该进程。

Pradeep,非常感谢您的回复。我不确定如何连接到w3wp?我的做法是打开VS 2008,然后选择“工具”->“附加到进程”,并选择aspnet_wp.exe。我确信我做错了什么,因为在我附加之后,我无法在VS上执行任何操作。您能指导我如何操作吗?还有最后一行是什么意思? - Sri Reddy
aspnet_wp.exe是正确的进程进行附加。我猜你在Windows XP机器上。你正在采取正确的步骤。我曾经见过这种行为,即使服务托管在IIS中,VS也会启动其内置Web服务器“WebDev.WebServer40.exe”(我在VS 2010中看到了这个名称)。你还需要附加到它旁边的aspnet_wp.exe。你能否分享你的代码库,以便我也可以查看。 - Pradeep
2
谢谢Pradeep,我无法调试。我在这里缺少的是我需要进行调试的步骤:我将在此为其他人提供:1.在客户端调用Web服务方法之前以及服务方法中放置断点(重要)。2.运行应用程序。3.当控件位于客户端断点上时,打开Debug->附加到进程并选择aspnet_wp.exe。4.现在开始调试。哇!!! - Sri Reddy
1
我使用Windows 7,我只有5个w3wp.exe。如果我将其附加到其中任何一个上,它会工作吗?@Pradeep - Pradip

4
我发现特别容易的是,打开两个Visual Studio实例(尤其是如果你使用NUnit或进行任何测试代码的操作)。其中一个将附加Nunit或您想要的任何其他内容,而另一个将附加w3wp.exe进程。最简单的方法是:
1)在第一个Visual Studio实例中,在代码命中运行在您的计算机上托管的WCF服务之前的位置设置断点。
2)一旦代码在断点处停止,请在第二个Visual Studio实例中设置您希望打断点的位置,然后附加w3wp.exe进程。
3)一旦继续执行,服务代码上的断点应该被触发。
有时,使用w3wp.exe附加进程时查找进程ID也更容易。使用IIS,您可以进入“工作进程”并查找要附加到应用程序池名称的进程ID。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接