Windows 服务(托管 WCF 服务)在启动时立即停止

Posted

技术标签:

【中文标题】Windows 服务(托管 WCF 服务)在启动时立即停止【英文标题】:Windows service (hosting WCF service) stops immediately on start up 【发布时间】:2011-06-01 15:07:29 【问题描述】:

我的问题:安装服务后,我无法导航到基址,因为服务不会继续运行(立即停止)。我需要在服务器或我的机器上做些什么来使 baseAddress 有效吗?

背景:我正在尝试学习如何使用托管在 Windows 服务中的 WCF 服务。我已经阅读了几篇关于如何实现这一点的教程,看起来非常简单。我查看了这个MSDN article 并逐步构建它。我可以在我的机器和服务器上安装该服务,但是当我启动该服务时,它会立即停止。然后我找到this tutorial,它本质上是一样的,但它包含一些使用WCF服务的客户端。我下载了源代码,编译,安装,但是当我启动服务时,它立即停止了。

搜索 SO,我发现了一个 possible solution,它说要在实例化 ServiceHost 时定义 baseAddress,但这也无济于事。

我的 serviceHost 定义为:

serviceHost = new ServiceHost( typeof( CalculatorService ), 
                 new Uri( "http://localhost:8000/ServiceModelSamples/service" ) );

我的服务名称、基地址和端点:

<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
        <host>
            <baseAddresses>
                <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
            </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>

我已验证命名空间是相同的。令人沮丧的是,教程似乎假设只要遵循所有规定的步骤,Windows 服务就会启动。我错过了一些东西,它可能就在我面前。请帮忙!

【问题讨论】:

【参考方案1】:

当您的 Windows 服务立即停止时,OnStart 方法中会引发异常。请尝试捕获并记录该异常。

【讨论】:

我不知道它是怎么做到的,但是一旦我在它周围包裹了一个 try/catch(并记录了异常),服务仍然启动并且实际上没有记录任何错误。我现在可以导航到 baseAddress。奇怪的。谢谢! 谢谢,这让我发疯了。将其包裹在 try catch 中,一切正常。 我遇到的问题是服务在尝试启动后立即停止并且没有任何记录。 try-catch 中的整个 OnStart() 代码。可能是登录文件有问题? @XaweryWiśniowiecki 只需在开头调用 Thread.Sleep(10000) 并附加调试器。 首先您可以尝试检查“事件查看器/WindowsLogs/应用程序”。如果你没有捕捉到异常,它可能就在那里【参考方案2】:

晚了,但我发现这行作为OnStart 的第一行对调试服务非常有帮助:

System.Diagnostics.Debugger.Launch(); 

然后,您可以选择已加载项目的 Visual Studio 运行会话(注意:您可能需要以管理员身份运行该会话)并开始逐步执​​行您的代码。

【讨论】:

很好的提示,谢谢。我似乎记得 Debugger.Launch 在某个地方很烦人,并且觉得它对我没有用,但在这里很完美。【参考方案3】:

我曾经在尝试使用重载方法或可选参数启动承载 WCF 并在 C# 中编译没有任何错误但在 WCF 中不允许的服务时遇到类似的问题...

【讨论】:

以上是关于Windows 服务(托管 WCF 服务)在启动时立即停止的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows 7 上的 Windows 服务中使用 netNamedPipeBinding 托管和启动 WCF 服务

从作为 LocalSystem 运行的 WCF 托管服务以特定用户身份启动进程

无法从托管 wcf 的 Windows 服务启动 WinWord

托管在 Windows 服务中的 WCF 服务在停止时挂起

在 Server 2008 上的 Windows 服务中托管 WCF 服务时应该使用啥帐户?

使用 Windows 服务中托管的 WCF 服务时出现 HTTP 获取错误