在Web请求之间共享资源?

时间:2013-11-25 23:51:55

标签: c# asp.net session-management resource-management

ASP.Net中是否有标准方法在Web请求之间共享资源?

这是我的问题:

  • 我需要从几页后面的代码中查询一个Web服务
  • 此Web服务一次只允许一个登录会话
  • 如果您登录两次,则第一个会话无效
  • 会话存储为字符串,每45分钟到期,此时我必须重新进行身份验证
  • 两个查询可以同时运行,只要它们使用相同的会话
  • 即可

话虽如此,将此会话同时提供给多个页面/请求的最佳方法是什么?如何在会话到期后确保在重新登录后共享新会话?

这一切都在一台服务器上运行。

3 个答案:

答案 0 :(得分:1)

我会将整个Web服务包装在类似服务的类中,并使用类似于ninject的IoC来管理该服务的实例。然后,您应该在ninject中提出custom scope以使过期的会话无效。

然后在您的asp .net中,每个需要访问该Web服务资源的请求都应该要求ninject返回您创建的服务的实例。只要会话有效,ninject就会设法始终返回相同的实例(假设您已经获得了自定义范围)。

答案 1 :(得分:0)

我认为您正在寻找的是用于保持数据通过会话的“会话”变量。

http://msdn.microsoft.com/en-us/library/aa287606(v=vs.71).aspx

- 编辑--- .net的Application对象是你正在寻找的,它适用于3.0:msdn.microsoft.com/en-us/library/ms178594(v = vs.85).ASPX

通过这种方式,您可以在服务器中运行应用程序来保存状态变量。

答案 2 :(得分:0)

如果您的站点在单个服务器上运行,您可以将服务的会话字符串存储在Cache中,该字符串具有与服务器进程相对应的最大生命周期和可见性,而不是客户端的一个会话。 / p>

然后,您的代码的任何部分都可以轻松获取当前会话信息,并在新会话尚未处于缓存中时建立新会话。如果您将缓存生命周期安排为略短于服务的会话生命周期,那么您将永远不会看到会话因过期而拒绝您 - 您自己的缓存副本将始终首先到期。