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

时间:2010-12-30 15:48:50

标签: c# wcf windows-services

我的问题:安装服务后无法导航到基地址,因为服务不会继续运行(立即停止)。我需要在服务器或我的机器上做什么才能使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服务就会启动。我错过了什么,它可能就在我面前。请帮忙!

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

到目前为止,我发现这一行是OnStart中第一行,对调试服务非常有帮助:

System.Diagnostics.Debugger.Launch(); 

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

答案 2 :(得分:1)

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