我在IIS7中托管了一个WCF服务。该服务有一个静态类,其中包含一个包含字符串的静态列表(日志类型)。它会定期将条目写入文件或数据库。
但是,当IIS决定重新设置应用程序或因任何原因终止时,静态字段中的条目将丢失。
有什么方法可以处理服务关闭类事件并从内存中保留数据?
由于
Shreedhar
答案 0 :(得分:3)
我已经通过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天);很可能有其他方法可以实现这一目标,但至少这应该会给你一些指导。