2

我有一个 WCF 服务,它使用basicHttpBinding. 该服务充当分布在多台机器(称为客户端)上的其他服务的控制器。
该服务配置为Single ContextMode使用Multiple ConurrecnyMode. 这样它就会保持对象的状态。我的问题是在一段时间不活动后,我看到服务再次调用构造函数,因此它失去了所有状态!有什么建议可以让这项服务永远存在吗?

谢谢!

4

2 回答 2

0

听起来 IIS 正在回收您的服务。请记住这一点(摘自 Internet Information Services Hosting Best Practices):

IIS 宿主环境针对不在内存中维护本地状态的服务进行了优化。IIS 回收主机进程以响应各种外部和内部事件,导致专门存储在内存中的任何易失性状态丢失。托管在 IIS 中的服务应将其状态存储在进程外部(例如,在数据库中)或内存缓存中,如果发生应用程序回收事件,可以轻松地重新创建该缓存。

虽然可以禁用回收,但如果您需要托管 IIS 并且您关心状态,您可能应该将它放在一个持久的位置。

于 2011-06-21T04:08:15.050 回答
0

默认情况下,IIS 每 29 小时回收一次应用程序池。

为避免这种情况,您可以转到应用程序池回收设置并取消选中此选项。

在此处输入图像描述

这仍然不能保证 100% 的状态持久性,因为 IIS 可以重新启动,应用程序池可以在 web.config 更改时回收等。如果状态对您很重要,您可能希望将状态持久化而不是依赖于数据库而不是依赖在内存上。

另一个要考虑的选择是将服务托管在 Windows 服务而不是 IIS 中。

于 2011-06-21T04:13:20.003 回答