在处理WCF服务时执行Process.Kill代码

时间:2014-09-10 16:54:55

标签: c# .net wcf

我在IIS上托管了一个WCF服务,它通过COM接口引用了一个遗留工具。 这个遗留工具对我来说是一个黑盒子,所以我无法更改其代码或修复其中的错误。 当我重新启动WCF服务或通过IIS管理工具停止它时,引用的旧工具也应该关闭,以及它使用的所有其他非托管数据,并在重新启动的WCF服务的第一次调用时重新启动。

一切正常,除了对这个遗留工具的一个函数调用。如果我调用这个特定的函数,那么工具中可能存在一些错误,即使我停止了我的WCF服务,也会阻止它崩溃。

我想到了一个解决方法,每次我的WCF服务应用程序处理时,我都会调用Process.Kill函数。我的困难在于我无法找到合适的地方来称呼它。

首先,我尝试使我的服务行为类继承自 IDisposable ,然后实现Dispose方法。问题是每次函数完成它的流程时都会调用Dispose,但是当然每次调用都不会杀掉遗留工具。

我的WCF服务通过 Net Pipe频道与客户端应用进行通信,因此根据我的理解,我无法使用 Global.asax 文件。

我的问题是 - 当处理整个WCF服务应用程序时,如果我希望它只被调用一次,那么调用Process.Kill代码的合适位置在哪里。

感谢。

2 个答案:

答案 0 :(得分:0)

您需要实现自定义服务工厂来拦截结束事件,请参阅: Performing action before WCF service is shutdown

答案 1 :(得分:0)

最后,我通过在服务行为的静态构造函数中调用Kill进程代码来解决问题。即使对于PerCall上下文模式,也会调用此构造函数一次,因此实际上对我来说它具有与在单个上下文模式下调用Dispose阶段的代码相同的效果。 谢谢你们所有人。