【问题标题】:Debug WCF service called by a windows service in C#在 C# 中调试由 Windows 服务调用的 WCF 服务
【发布时间】:2010-01-14 03:37:45
【问题描述】:

我有一个使用 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 服务?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我想使用第二种方法,因为业务层中的所有业务逻辑都通过 WCF 服务公开。如何配置windows服务连接WCF服务
    • 问问自己最初是如何配置 Windows 服务以连接到 WCF 服务的。无论该配置在哪里,您都需要更改它以进行调试。在调试模式下查找 WCF 服务的端点信息: 当您在调试模式下运行 WCF 项目时,系统托盘图标是 WCF 服务的托管进程,您可以获取端口号和其他端点信息在那里。
    • 我也有类似的问题,但不同的是 WCF 服务是一个独立的应用程序(WCF 和 windows 服务不是同一解决方案的一部分)。当我尝试从 Windows 服务调试 WCF 服务时,我收到消息“无法自动进入服务器。调试器已附加”。您能否对此有所了解。仅供参考 WCF 服务托管在 IIS express 中
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      相关资源
      最近更新 更多