【问题标题】:Migrate WCF service from IIS to self host. How and should I?将 WCF 服务从 IIS 迁移到自托管。我应该怎么做?
【发布时间】:2011-11-23 02:30:37
【问题描述】:

我目前在 IIS 7.5 上托管 WCF 服务。

问题是我需要在会话期间保存数据(使用静态成员),但 AppPool 回收会不断删除所有缓存的数据。

据我了解,我唯一的解决方案是自行托管服务。 我不知道如何做到这一点以及利弊。 这真的是我唯一的选择吗?

更新

看起来有一个不同的问题。 我在控制台应用程序上将托管从 IIS 更改为自托管,我发现了一个导致应用程序崩溃的错误。我猜这是数据丢失的原因,而不是应用程序池回收的原因......

【问题讨论】:

  • 取决于几件事...您的服务是否使用数据库?应用程序回收和会话管理如何工作(回收应用程序池也会丢失所有会话,而不仅仅是缓存数据)?
  • 我确实使用数据库来检索和保存数据。是的,当应用程序池回收时,我失去了一切......
  • 为什么不使用数据库作为缓存?您的会话管理是如何实现的?
  • 数据库只存储部分数据。不是全部——而且有很多数据。我无法真正将所有内容都存储在数据库中。
  • 我创建了一个会话类。所有会话类都存储在一个单例类中。

标签: wcf


【解决方案1】:

这似乎不是从 IIS 迁移到 Windows 服务的好理由。为什么不通过

禁用应用程序池回收

空闲超时(分钟)= 0

"正常时间间隔(分钟)" = 0

所以它永远不会回收

还有

Disable Recycling for configuration Changes = true

这些设置存在于 AppPool 的高级设置中

更新:怎么样

"禁用重叠回收" = true

AppPool 回收设置

【讨论】:

  • ok 右键单击​​您的应用程序池选择池回收设置并取消勾选所有内容,例如基于内存、请求数,然后取消勾选下一页上的所有内容
  • 已经完成了所有这些...没有帮助...我不知道我是否是 AppPool,但是某些原因导致我丢失了所有缓存的数据...
  • 只是为了确保它不再回收,从“高级设置”中的“生成回收事件日志条目”启用池的事件写入
【解决方案2】:

如果这是问题所在,我认为您将缓存存储在内存中。我们可以将缓存存储在磁盘、数据库或任何您自定义的位置。因此无需将您的应用程序从 IIS 移动到自托管。

http://weblogs.asp.net/scottgu/archive/2010/01/27/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多