正在执行进程.在释放WCF服务时终止代码
本文关键字:终止 代码 服务 释放 执行 进程 WCF | 更新日期: 2023-09-27 18:21:20
我有一个WCF服务托管在IIS上,它通过COM接口引用了一个遗留工具。这个遗留工具对我来说是一个黑盒子,所以我不能更改它的代码或修复其中的错误。当我重新启动WCF服务或通过IIS管理工具停止它时,引用的旧版工具以及它使用的所有其他非托管数据也应该关闭,并在重新启动的WCF服务的第一次调用时重新启动。
除了这个遗留工具上的一个函数调用外,一切都很好。如果我调用这个特定的函数,那么该工具内部可能存在一些错误,即使我停止了WCF服务,也会阻止它停止运行。
我想了一个变通方法,每次处理WCF服务应用程序时,我都会调用Process.Ckill函数。我的困难在于我找不到合适的地方来称呼它
首先,我尝试使我的服务行为类继承自IDisposable,然后实现一个Dispose方法。问题是每当函数完成其流时都会调用Dispose,但我当然不能每次调用都杀死遗留工具。
我的WCF服务通过Net Pipe通道与客户端应用程序通信,因此据我所知,我无法使用Global.asax文件。
我的问题是-如果我希望在整个WCF服务应用程序被处理时只调用一次Process.Ckill代码,那么在哪里是调用Process.CKill代码的合适位置。
谢谢。
最后,我通过在服务行为的静态构造函数中调用Kill进程代码来解决问题。即使在PerCall上下文模式下,这个构造函数也会被调用一次,所以实际上对我来说,它的效果与我在单上下文模式下在Dispose阶段调用代码的效果相同。谢谢大家。
您需要实现一个自定义服务工厂来拦截关闭事件,请参阅:在WCF服务关闭之前执行操作