处理ServiceHostFactory.CreateServiceHost失败的正确方法是什么?

时间:2013-04-10 22:24:07

标签: wcf service servicehost

我有一些WCF服务已经测试好了一段时间了。我们使用Windows进程激活服务(WAS)在IIS中托管它们。当客户连接时,服务就会响起,我们很高兴。

现在,像我一样偏执,在我们运送这件事之前,我想测试一系列与服务如何处理某些类型的故障相关的边缘情况。其中一个实验涉及在为特定服务创建ServiceHost本身期间失败。

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

[另外,当我们的客户看到这个例外时,他们会停止尝试访问该服务(假设如果第一次未能激活,则需要人员参与)。这不同于,例如,EndpointNotFoundException,客户端将在假定瞬态网络状况的情况下定期继续尝试。]

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

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

我还应该做些什么来告诉WCF,激活一项服务的失败应该使该服务“脱机”但允许应用程序池中的其他服务继续处理请求?或者我错过了WAS更基本的东西?

0 个答案:

没有答案