Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
Wcf 处理ServiceHostFactory.CreateServiceHost故障的正确方法是什么?_Wcf_Service_Servicehost - Fatal编程技术网

Wcf 处理ServiceHostFactory.CreateServiceHost故障的正确方法是什么?

Wcf 处理ServiceHostFactory.CreateServiceHost故障的正确方法是什么?,wcf,service,servicehost,Wcf,Service,Servicehost,我有一些WCF服务已经测试了一段时间了。我们使用Windows Process Activation Services(WAS)将它们托管在IIS中。当客户端连接时,服务就会启动,我们很高兴 现在,尽管我有点偏执,在我们发布这个东西之前,我想测试一系列与服务如何处理某些类型的故障相关的边缘案例。其中一个实验涉及在为特定服务创建ServiceHost本身的过程中发生故障 我们有一个自定义ServiceHostFactory(源自ServiceHostFactoryBase),它执行一些初始化工作并

我有一些WCF服务已经测试了一段时间了。我们使用Windows Process Activation Services(WAS)将它们托管在IIS中。当客户端连接时,服务就会启动,我们很高兴

现在,尽管我有点偏执,在我们发布这个东西之前,我想测试一系列与服务如何处理某些类型的故障相关的边缘案例。其中一个实验涉及在为特定服务创建ServiceHost本身的过程中发生故障

我们有一个自定义ServiceHostFactory(源自ServiceHostFactoryBase),它执行一些初始化工作并返回一个完全配置的服务主机。我正在模拟一个配置错误,该错误将导致CreateServiceHost在初始化期间抛出ServiceActivationException。我们还记录了异常

[另一方面,当我们的客户看到此异常时,他们会停止尝试访问该服务(假设首次激活失败,则需要人工参与)。这与EndpointNotFoundException(例如EndpointNotFoundException)不同,在EndpointNotFoundException中,客户会定期尝试,假设出现暂时的网络状况。]

我们看到的是,客户端尝试(一次)打开一个到服务的通道。ServiceHostFactory似乎在几秒钟内多次尝试激活服务,每次尝试都失败,并显示预期的异常消息,然后应用程序池似乎只是锁定。对该应用程序池中运行的其他服务(已成功激活)的呼叫将永远挂起

这似乎很奇怪。我不介意失败的服务会在几次尝试激活失败后从应用程序池中启动,但终止其他服务似乎是错误的。请注意,应用程序池不会回收或停止——它只是坐在那里,不响应对任何服务操作的请求


我是否应该做些其他事情来告诉WCF,激活一个服务失败会使该服务“离线”,但允许应用程序池中的其他服务继续处理请求?或者我缺少了WAS更基本的功能?

也许不是你想要的答案,但是在自己的应用程序池中运行每个服务怎么样,这样它们就可以与其他服务中的问题隔离开来。如果您有大量非常活跃的服务,可能会遇到资源问题,但如果只有少数服务,则可能值得考虑。我们当然可以这样做,但a)我们有很多服务,b)我们是供应商,将其打包为产品,因此我们希望为客户保持尽可能简单的配置,c)我真的很想了解是什么导致了这一点——我觉得我错过了一些基本的东西。