在关闭WCF服务之前执行操作

时间:2012-08-02 01:04:54

标签: wcf

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

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

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

由于

Shreedhar

1 个答案:

答案 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天);很可能有其他方法可以实现这一目标,但至少这应该会给你一些指导。