在C#中由Windows服务调用的调试WCF服务

时间:2010-01-14 03:37:45

标签: c# wcf

我有一个使用Quartz.NET安排的Windows服务。我必须调试它。由于我无法调试start方法,因此我在Execute方法上设置了一个断点。我编译了我的解决方案并使用installutil /i Name of the exe安装了此服务。然后我从Visual Studio的Debug菜单中做了Attach To Process并附加了那个EXE。

当该服务运行时,它会在该断点处停止。代码如下

    using OA.FileProcessing.WinService.IngeoServiceReference;

    public virtual void Execute(JobExecutionContext context)
    {
        IngeoClient ingeoclient = new IngeoClient();
        ingeoclient.ShowIngeoData();
        ingeoclient.UpdateIngeoData();
    }

OA.FileProcessing.WinService.IngeoServiceReference是仅在我的计算机上的IIS上托管的WCF服务。调试器不会介入:

       ingeoclient.ShowIngeoData();

我尝试添加aspnet_wp.exe作为一个过程,但它说调试器已经附加了。

如何从Windows服务调试此WCF服务?

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

一种方法是我将创建一个控制台应用程序项目,并引用服务项目的exe(与引用DLL的方式相同)。创建一个模拟JobExecutionContext并从Console应用程序调用Execute。配置Visual Studio以启动WCF服务和模拟控制台应用程序: 在Solution Explorer中,右键单击解决方案名称。单击“设置启动项目”。在Solution Properties对话框中,选择Multiple Startup Projects。

这将在调试模式下启动控制台模式应用程序和WCF应用程序。控制台应用程序调用Windows Service Execute方法,该方法又调用您的服务。由于所有内容都在调试模式下运行,因此断点应该没有问题。

另一个选项是将WCF服务设置为启动项目,在Visual Studio中以调试模式运行它,然后配置Windows服务以连接到它。使用此方法,您将无法单步执行Windows服务,但WCF服务中的断点应该可以正常工作。

答案 1 :(得分:0)

最好在调试模式下从Visual Studio Selfhost运行IIS中托管的服务器,并在Windows服务中使用它并独立调试。