我有一个使用basicHttpBinding托管在IIS7上的WCF服务。该服务充当分布在多台计算机上的其他服务的控制器,这些服务称为客户端。
该服务配置为具有Multiple ConurrecnyMode的Single ContextMode。这样它就能保持物体的状态。我的问题是,在一段时间不活动后,我看到服务再次调用构造函数,因此它失去了所有状态!有什么建议可以让这项服务永远存在吗?
谢谢!
发布于 2011-06-21 12:08:15
听起来IIS正在回收您的服务。请记住这一点(摘自互联网Information Services Hosting Best Practices):
为不在内存中维护本地状态的服务优化了IIS宿主环境。IIS回收主机进程以响应各种外部和内部事件,从而导致专门存储在内存中的任何易失性状态丢失。IIS中承载的服务应将其状态存储在进程外部(例如,在数据库中),或者存储在内存中的缓存中,如果发生应用程序回收事件,则可以很容易地重新创建该缓存。
虽然可以禁用回收,但如果您需要IIS托管并且您关心状态,那么您可能应该将其放在一个持久的位置。
发布于 2011-06-21 12:13:20
默认情况下,IIS每29小时回收一次应用程序池。
要避免这种情况,您可以转到应用程序池回收设置并取消选中此选项。

这仍然不能保证100%的状态持久化,因为IIS可以重新启动,应用程序池可以在web.config更改时回收,等等。如果状态对你很重要,你可能希望将状态持久化到数据库中,而不是依赖于内存。
另一个要考虑的选择是在Windows服务中托管服务,而不是在IIS中。
https://stackoverflow.com/questions/6420203
复制相似问题