【问题标题】:Singleton objects and AppPool Recycling单例对象和 AppPool 回收
【发布时间】:2015-05-13 17:06:26
【问题描述】:

我目前正在构建针对 kerberos 域控制器对用户进行身份验证的休息服务。由于每次用户尝试在系统中执行操作时都戳 KDC 非常耗时,因此我有一个缓存,用于存储身份验证令牌及其相关主体。

所以基本上,我的服务提供两种身份验证方案:Kerberos 和令牌。我遇到的问题是我的缓存对象(在我的 DI 容器中限定为单例)在应用程序池被回收时丢失了。此外,即使应用程序池没有被回收,这种行为也会阻止我在多个服务器上分发我的服务。

如何在应用程序池中保留我的缓存对象?

【问题讨论】:

    标签: caching iis asp.net-web-api2 application-singleton


    【解决方案1】:

    通过回收应用程序池,您实际上是在终止应用程序并从头开始。与任何标准应用程序一样,有几种方法可以跨应用程序实例保存数据:

    1) 在 KDC 之上添加一个身份验证层。在可以从您的主服务调用的不同应用程序池中创建另一个服务。如果新的应用程序池被回收,您仍然会遇到同样的问题,但回收的条件应该特定于用户的身份验证和服务器的状态。

    2) 将对象保存在您自己的数据库或文件系统中。如果在身份验证后序列化对象,则可以将对象持久保存在本地存储中,这可能比访问 KDC 控制器更便宜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2012-06-29
      • 2016-04-10
      • 2015-10-09
      相关资源
      最近更新 更多