2010-01-14 270 views
3

我有一个使用Quartz.NET计划的Windows服务。我必须调试它。由于我无法调试启动方法,因此我在Execute方法上放置了一个断点。我编译了我的解决方案并使用installutil /i Name of the exe安装了此服务。然后我从Visual Studio的调试菜单中做了Attach To Process并附上了EXE。通过C#中的Windows服务调用WCF调试服务#

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

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服务?

回答

1

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

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

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

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

+0

我想用第二种方法作为业务层中通过WCF服务公开的所有业务逻辑。如何配置Windows服务以连接到WCF服务 – Rohit 2010-01-14 04:17:23

+0

问问自己如何初始配置您的Windows服务以连接WCF服务。无论何种配置,您都需要将其更改为调试。要在调试模式下找到WCF服务的端点信息:当以调试模式运行WCF项目时,会有一个系统托盘图标,它是WCF服务的托管进程,您可以获取端口号和其他端点信息那里。 – AaronLS 2010-01-14 04:59:02

+0

我有一个类似的问题,但区别在于WCF服务是一个独立的应用程序(WCF和Windows服务不是同一解决方案的一部分)。当我尝试从Windows服务调试WCF服务时,出现消息“无法自动进入服务器,调试器已连接”。你能否介绍一下这个问题。仅供参考WCF服务托管在IIS Express中 – Hari 2014-01-06 08:34:17

0

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