2012-08-02 118 views
1

我有一个WCF服务托管在IIS7中。该服务具有包含字符串的静态列表的静态类(日志类型)。它会定期将条目写入文件或数据库。在WCF服务关闭之前执行操作

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

有没有什么办法可以处理服务关闭类事件并坚持内存中的数据?

感谢

Shreedhar

+1

处理ServiceHost的[CommunicationObject.OnClosing方法](http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.communicationobject.onclosing.aspx)? – Tim 2012-08-02 06:10:29

+0

我该怎么做?我是否从ServiceHost派生?正如我所说的服务托管在IIS7中,并不做自我托管。 – 2012-08-02 15:09:44

+0

您可以在IIS中实现自定义ServiceHost。我现在没有时间,但我可以在今天晚上回家时(我在美国西海岸)给出更充分的答案。 – Tim 2012-08-02 18:52:39

回答

2

我通过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天);很可能有其他方法来实现这一点,但至少这应该会给你一些方向。

+0

太好了,谢谢蒂姆。我的应用程序仍然在框架的v3.5中,所以这会很好。我会尽快实施和测试这个解决方案。 – 2012-08-06 21:46:20

相关问题