我有一个使用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服务?
答案 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服务中使用它并独立调试。