Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Windows服务托管的WCF终结点存在问题_C#_Wcf_Startup_Delay - Fatal编程技术网

C# 从Windows服务托管的WCF终结点存在问题

C# 从Windows服务托管的WCF终结点存在问题,c#,wcf,startup,delay,C#,Wcf,Startup,Delay,我有一个托管的Windows服务,它托管两个WCF端点。该服务设置为在电脑重新启动时自动启动。重新启动时,我发现这行代码: ServiceHost wcfHost1 = new ServiceHost(typeof(WCFHost1)); 在OnStart中,服务的方法需要15-20秒才能执行。实际上,我有两个这样的语句,但第二个语句在瞬间执行。这是第一个需要这么长时间的。有人知道是什么导致了瓶颈吗?因此,有时调用超过30秒,因此SCM在尝试初始化自身时认为我的服务超时。现在,我知道这很容易,

我有一个托管的Windows服务,它托管两个WCF端点。该服务设置为在电脑重新启动时自动启动。重新启动时,我发现这行代码:

ServiceHost wcfHost1 = new ServiceHost(typeof(WCFHost1));
在OnStart中,服务的方法需要15-20秒才能执行。实际上,我有两个这样的语句,但第二个语句在瞬间执行。这是第一个需要这么长时间的。有人知道是什么导致了瓶颈吗?因此,有时调用超过30秒,因此SCM在尝试初始化自身时认为我的服务超时。现在,我知道这很容易,我只是剥离一个线程来做这件事,并从OnStart立即返回,但我想知道是什么原因会造成这种延迟

只有在电脑重新启动时服务启动时才会发生这种情况。如果电脑已启动并正在运行,服务将在不到一秒钟内启动和停止。

可能会提供更多帮助。基本上,我认为您需要弄清楚您有哪些依赖项,并将它们添加到您的服务中,以便它们先于您的服务开始

这只是一个猜测,但可能是.net framework尚未加载。也许,您可以尝试将自动启动设置为延迟自动启动,这将允许.net framework和其他windows服务有时间启动

此外,当.net应用程序启动时,它将使用即时编译器进行编译。这可能是在等待.net编译它

最后,根据您使用的WCF实例的类型,您可能会遇到构造函数初始化需要一段时间的问题

希望这有帮助。

可能会提供更多帮助。基本上,我认为您需要弄清楚您有哪些依赖项,并将它们添加到您的服务中,以便它们先于您的服务开始

这只是一个猜测,但可能是.net framework尚未加载。也许,您可以尝试将自动启动设置为延迟自动启动,这将允许.net framework和其他windows服务有时间启动

此外,当.net应用程序启动时,它将使用即时编译器进行编译。这可能是在等待.net编译它

最后,根据您使用的WCF实例的类型,您可能会遇到构造函数初始化需要一段时间的问题


希望这能有所帮助。

我在启动Windows服务时遇到了问题,需要很长时间。我发现这是因为我使用了企业库的签名程序集。NET在加载程序集时尝试验证Authenticode签名,可能是您的构造函数第一次使用导致加载该程序集的类型。只需尝试将以下内容添加到app.config。当它不起作用时,你会有另一个问题

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

你也可以在这里找到一些额外的信息:而且,我在Windows服务上遇到了问题,需要很长时间才能启动。我发现这是因为我使用了企业库的签名程序集。NET在加载程序集时尝试验证Authenticode签名,可能是您的构造函数第一次使用导致加载该程序集的类型。只需尝试将以下内容添加到app.config。当它不起作用时,你会有另一个问题

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

您还可以在这里找到一些额外的信息:而且您的WCF服务没有问题。解决问题的最佳方法是创建一个虚拟操作,客户机必须在调用其他操作之前调用该操作。这将迫使您的客户在您进行真正的交易之前在您的服务上进行握手。实际上,我时不时地使用虚拟操作调用我的服务,看看它是否仍然存在

您的WCF服务没有问题。解决问题的最佳方法是创建一个虚拟操作,客户机必须在调用其他操作之前调用该操作。这将迫使您的客户在您进行真正的交易之前在您的服务上进行握手。实际上,我时不时地使用虚拟操作调用我的服务,看看它是否仍然存在

@daub815:延迟启动在XP上不可用,我需要它在XP和Vista上工作。我知道服务实现的ctor几乎什么也没做。@daub815:对不起,我第一次没有看到你的链接。我的没那么复杂。“我的OP”中的简单ServiceHost实例化行是所有瓶颈所在。这条简单的行在幕后做得更多,如果它只是在启动时发生,那么在您的服务之前还需要启动另一个服务。@daub815:延迟启动在XP上不可用,我需要它在XP和Vista上运行。我知道服务实现的ctor几乎什么也没做。@daub815:对不起,我第一次没有看到你的链接。我的没那么复杂。我OP中的简单ServiceHost实例化行是所有瓶颈所在
e line在幕后做得更多,如果只是在启动时,然后还有另一个服务需要在您启动之前启动。第一次调用ServiceHost.Open可能会设置整个WCF运行时和所有-这将需要一两秒钟的时间…您正在测试哪个版本的Windows?第一次调用ServiceHost.Open可能会设置整个WCF运行时和所有-这将需要一秒钟的时间或者两个…..您正在测试哪个版本的Windows?抱歉,但他的问题发生在ServiceHost open上,而不是在操作调用上。抱歉,但他的问题发生在ServiceHost open上,而不是在操作调用上。