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

标签 c# wcf

我有一个已使用 Quartz.NET 安排的 Windows 服务.我必须调试它。由于我无法调试 start 方法,所以我在 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 服务?

最佳答案

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

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

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

另一种选择是将 WCF 服务设置为启动项目,在 Debug模式下从 visual studio 运行它,然后配置 Windows 服务以连接到它。使用此方法,您将无法单步执行 Windows 服务,但 WCF 服务中的断点应该有效。

关于c# - 在 C# 中调试 Windows 服务调用的 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062016/

相关文章:

c# - 为什么 Principal.IsMemberOf() 对某些组返回假阴性?

c# - 使用 C# 在 WinRT 中获取可用磁盘空间

c# - 从 Android 应用程序调用 Azure Web api 在等待响应时永远挂起

c# - CA1303 警告 - 方法将文字字符串作为参数传递

c# - 使用 Configure 方法时如何在代码中设置 WCF 基地址

wcf - 连接被拒绝 - 工作中的 nettcp WCF 服务 - 客户端通过 VPN 连接

c# - 需要帮助在 C# 中定义接口(interface)

c# - 具有继承变化的DataContract

WCF 缓慢的 ServiceHost.Open() 调用

.net - 多线程自承载 WCF 服务