我有一个托管在 IIS7 中的 WCF 服务。该服务有一个静态类,其中包含一个包含字符串(某种日志)的静态列表。它定期将条目写入文件或数据库。
但是,当 IIS 决定回收应用程序或因任何原因终止时,静态字段中的条目将丢失。
有什么方法可以处理服务关闭类事件并保留内存中的数据?
谢谢
什里达尔
我有一个托管在 IIS7 中的 WCF 服务。该服务有一个静态类,其中包含一个包含字符串(某种日志)的静态列表。它定期将条目写入文件或数据库。
但是,当 IIS 决定回收应用程序或因任何原因终止时,静态字段中的条目将丢失。
有什么方法可以处理服务关闭类事件并保留内存中的数据?
谢谢
什里达尔
我已经通过带有自定义服务主机的 IIS 实现了几个服务(最初我这样做是为了实现 IErrorHandler 以进行全局错误处理)。
您将需要两件事 - 的实现ServiceHost
和 的实现ServiceHostFactory
,它将调用您的自定义服务主机。例如(仅显示代码的相关部分):
public class MyCustomServiceHost : ServiceHost
{
protected override void OnClosing()
{
// logic to save off your static data
base.OnClosing();
}
}
public class MyCustomServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new MyCustomServiceHost(serviceType, baseAddresses);
}
}
在您的 .svc 文件中,您将拥有如下内容:
<%@ ServiceHost Service="MyCompany.MyServiceName" Factory="MyCompany.MyCustomServiceHostFactory" %>
<%@ Assembly Name="MyCustomServiceHost" %>
这是执行此操作的一种方法(这可以追溯到 .NET 3.5 天);很可能还有其他方法可以做到这一点,但至少这应该给你一些方向。