我有一个使用basicHttpBinding
在IIS 7上托管的WCF服务。该服务充当在多台机器上分配的其他服务的控制器,称为客户端
该服务配置为Single
ContextMode
Multiple
ConurrecnyMode
。这样它就能保持对象的状态。我的问题是在一段时间不活动后,我看到服务再次调用构造函数,因此它失去了所有状态!有任何建议让这项服务永远存在吗?
谢谢!
答案 0 :(得分:0)
听起来IIS正在回收您的服务。牢记这一点(摘自互联网Information Services Hosting Best Practices):
IIS托管环境是 针对没有的服务进行了优化 在内存中保持本地状态。 IIS 回收主机进程作为回应 到各种外部和内部 事件,导致任何不稳定状态 专门存储在内存中 丢失。 IIS中托管的服务应该 将他们的状态存储在外部 进程(例如,在数据库中) 或者可以在内存缓存中 如果是应用程序,可以轻松地重新创建 发生回收事件。
虽然可以禁用回收,但如果您需要进行IIS托管并且关心状态,则应该将其置于持久的位置。
答案 1 :(得分:0)
默认情况下,IIS每29小时回收一次应用程序池。
为避免这种情况,您可以转到应用程序池回收设置并取消选中此选项。
这仍然不能保证100%状态持久性,因为IIS可以重新启动,当web.config更改时可以回收应用程序池等。如果状态对您很重要,您可能希望将状态保留到数据库而不是依靠记忆。
另一个需要考虑的选择是在Windows服务而不是IIS中托管服务。