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

3
我有一个使用Quartz.NET进行调度的Windows服务。我需要对其进行调试。由于我无法调试启动方法,因此我在Execute方法上设置了断点。我编译了我的解决方案并使用installutil /i Name of the exe安装了此服务。然后我从Visual Studio的调试菜单中选择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个回答

1

你可以有几种方法来实现这个。

其中一种方法是我会创建一个控制台应用程序项目,并引用服务项目的exe(与引用DLL的方式相同)。创建一个模拟的JobExecutionContext并从控制台应用程序调用Execute。配置Visual Studio启动WCF服务和模拟控制台应用程序: 在解决方案资源管理器中,右键单击解决方案名称。单击设置启动项目。在“解决方案属性”对话框中,选择多个启动项目。

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

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


我想采用第二种方法,因为所有的业务逻辑都在业务层中,并通过WCF服务公开。如何配置Windows服务以连接到WCF服务? - Rohit Raghuvansi
请问您最初是如何配置您的Windows服务以连接WCF服务的?无论该配置位于何处,您都需要更改它以进行调试。要在调试模式下查找WCF服务的终结点信息:当您以调试模式运行WCF项目时,会有一个系统托盘图标作为WCF服务的托管进程,您可以在那里获取端口号和其他终结点信息。 - AaronLS
我有一个类似的问题,但不同之处在于WCF服务是一个独立的应用程序(WCF和Windows服务不是同一个解决方案的一部分)。当我尝试从Windows服务调试WCF服务时,我收到消息“无法自动步入服务器。调试器已经附加”。你能否请帮忙解决一下这个问题?顺便说一下,FYI,WCF服务托管在IIS Express中。 - Hari

0

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


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