我有一个托管Windows服务,托管几个WCF端点。该服务设置为在重新启动PC时自动启动。在重新启动时,我发现这行代码:
ServiceHost wcfHost1 = new ServiceHost(typeof(WCFHost1));
服务的OnStart()方法中的需要15到20秒才能执行。实际上我有两个这样的陈述,但第二个在闪光灯中执行。这是第一个需要这么长时间的。有谁知道可能导致瓶颈的原因是什么?因此,有时呼叫超过30秒,因此SCM认为我的服务在尝试初始化时超时。现在,我知道我很容易将一个线程分离出来并立即从OnStart()返回,但我想知道是什么原因导致这种延迟。
当服务在PC重启时启动时,只发生 。如果PC启动并运行,则服务启动&在不到一秒的时间内停止。
答案 0 :(得分:0)
This可能会提供更多帮助。基本上,我认为您需要弄清楚您拥有哪些依赖项并将它们添加到您的服务中,因此它们在您的服务之前启动。
这只是一个黑暗的镜头,但可能是.net框架还没有加载。也许,您可以尝试将自动启动设置为延迟自动启动,这将允许.net框架和其他Windows服务时间启动。
此外,当.net应用程序启动时,它将使用Just-In-Time编译器进行编译。这可能正在等待.net编译它。
最后,根据您使用的WCF实例的类型,您可能会遇到构造函数需要一段时间进行初始化的问题。
希望这有帮助。
答案 1 :(得分:0)
我的Windows服务出现问题,需要很长时间才能启动。我发现这是因为我使用的签名程序集(Enterprise Library)。 .NET正在尝试在加载程序集时验证Authenticode签名(可能是您的构造器第一次使用类型导致加载该程序集)。只需尝试将以下内容添加到您的app.config中即可。当它不起作用时,你有另一个问题。
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
您还可以在此处找到一些额外信息:http://support.microsoft.com/kb/936707和Why is my .Net app contacting Verisign?
答案 2 :(得分:0)
您的WCF服务没有问题。解决问题的最佳方法是创建一个虚拟操作,客户端必须先调用其他操作。这将迫使您的客户在您的真实交易之前对您的服务进行握手。我实际上使用虚拟操作来不时调用我的服务,看它是否还活着。