2012-06-29 189 views
1

我在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方法,但不调用这些方法。

+0

你使用你的Windows服务来自我托管一个WCF Web服务,对吗? – abatishchev

+0

我在Windows服务中托管WCF服务,是的。 – Echilon

+0

你使用什么样的绑定? – abatishchev

回答

1

据我所知,当你在Visual Studio中结束调试时,这个进程只会在不调用终结器的情况下被终止,甚至不会执行finally块。

+0

什么是模拟停止服务的最佳方式。我能看到的唯一方法是编译,运行服务。然后附加调试器,然后停止服务,但这将非常繁琐,试图调试非常快。 – Echilon

+0

同意。您也可以将服务的代码作为独立代码进行测试和调试,而无需包装到Windows服务中。这种分离可以让你确保模型本身的工作。我通常创建一个控制台应用程序调用服务使用的代码,但不创建服务。 –

+0

惭愧,但谢谢你的回答。 – Echilon