2010-10-06 57 views
7

我有一个解决方案WCFSampleSolution,它具有我所有的项目 - Web服务,客户端和网站。该结构是这样的:在本地IIS中托管的调试WCF服务不起作用

  • WCFSampleSolution
    • C:\ WCFSample \网站
    • 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"> 

我把断点,但控制永远不会去我的seb服务。我也尝试过附加程序,但它也不起作用。但我能够调试我的其他WCF项目之一。设置有点不同。在该项目中,我复制了.svc文件并在我的Web客户端中进行了配置,调试工作正常。

请帮助!

回答

9

您正在IIS上托管您的服务,因此我确信您必须连接到w3wp.exe进程。当试图连接如果VS内置Web服务器启动,然后附加到该进程。

+0

Pradeep,非常感谢回复。我不知道如何附加到w3wp?我所做的是,打开VS 2008,然后选择Tools-> Attach to Process并选择aspnet_wp.exe。我确信我做得不对,因为在我附加之后,我无法对VS做任何事情。你能指导我怎么做吗?还有最后一行是什么意思? – 2010-10-06 20:27:16

+0

aspnet_wp.exe是附加的正确过程。我想你是在Windows XP机器上。你正在采取正确的步骤。我已经看到即使服务托管在IIS中的行为,VS启动其构建的Web服务器“WebDev.WebServer40.exe”(我在VS 2010中看到这个名称)。您还需要将其附加到aspnet_wp.exe的一侧。你还可以分享你的代码库,以便我也可以看看。 – Pradeep 2010-10-07 04:37:06

+2

谢谢Pradeep,我无法调试。我在这里错过的是,我需要做的工作之一是:我将其放在这里供其他人使用:1.在调用Web服务方法之前以及服务方法(重要)之前在客户端放置断点。 2.运行应用程序。 3.当控制位于客户端中断点时,打开Debug-> Attach to Process并选择aspnet_wp.exe。 4.立即开始调试。瞧! – 2010-10-07 15:36:33

4

我发现了什么特别容易被具有视觉工作室的两个实例开放(特别是如果你使用NUnit或做任何事情来测试码)。一个将附加NUnit或任何你想要的,另一个将附加w3wp.exe进程。最简单的方法是:

1)在代码的visual studio的第1个实例中放置一个断点,然后它将打击您的机器上托管的WCF服务。

2)一旦代码停在断点处,在您想要破解的第二个Visual Studio实例中设置断点,然后附加w3wp.exe进程。

3)一旦你继续,服务代码的断点应该被打。

当连接w3wp.exe时,有时候更容易找到进程ID。使用IIS,您可以转到“工作进程”并找到要为您的应用程序池名称附加的进程ID。