3

我有一个托管在 IIS7 中的 WCF 服务。该服务有一个静态类,其中包含一个包含字符串(某种日志)的静态列表。它定期将条目写入文件或数据库。

但是,当 IIS 决定回收应用程序或因任何原因终止时,静态字段中的条目将丢失。

有什么方法可以处理服务关闭类事件并保留内存中的数据?

谢谢

什里达尔

4

1 回答 1

4

我已经通过带有自定义服务主机的 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 天);很可能还有其他方法可以做到这一点,但至少这应该给你一些方向。

于 2012-08-04T00:41:08.283 回答