【问题标题】:Debugging Stopping a Windows Service调试停止 Windows 服务
【发布时间】:2012-06-29 09:18:36
【问题描述】:

我正在 VS2010 中调试 Windows 服务:

static void Main()
{
    #if (DEBUG)
        var s1 = new Service1();
        s1.Start();
        Thread.Sleep(Timeout.Infinite);
    #else
        ServiceBase.Run(new ServiceBase[] 
            { 
                new Service1() 
            });
    #endif
}

这让我可以在调试器中运行服务。问题是,在启动时,服务打开了一个 WCF 通道,在我通过停止调试终止进程后,该通道似乎占用了一个套接字。当我停止调试或服务停止时,如何关闭此套接字。我尝试在服务析构函数以及OnStopOnShutdown 方法中设置断点,但没有调用它们。

【问题讨论】:

  • 您是否使用 Windows 服务自托管 WCF Web 服务,对吗?
  • 我在 Windows 服务中托管 WCF 服务,是的。
  • 你使用什么样的绑定?

标签: c# .net wcf windows-services


【解决方案1】:

据我所知,当您在 Visual Studio 中结束调试时,该进程会在没有调用终结器的情况下被终止,甚至位于 finally 块的代码也不会被执行。

【讨论】:

  • 模拟停止服务的最佳方法是什么。我能看到的唯一方法是编译、运行服务。然后附加调试器,然后停止服务,但是尝试调试很快就会变得非常乏味。
  • 同意。您还可以将服务的代码作为独立代码进行测试和调试,而无需包装到 Windows 服务中。这种分离使您可以确保模型本身有效。我通常创建一个控制台应用程序,它调用服务使用的代码,但没有创建服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
相关资源
最近更新 更多