在 ASP.Net 中,是否有一种标准方法可以在 Web 请求之间共享资源?
这是我的问题:
- 我需要从几个页面后面的代码中查询一个 Web 服务
- 此 Web 服务一次只允许一个登录会话
- 如果您登录两次,则第一个会话无效
- 会话存储为字符串,每 45 分钟过期一次,此时我必须重新进行身份验证
- 两个查询可以同时运行,只要它们使用同一个会话
话虽如此,让这个会话同时可用于多个页面/请求的最佳方式是什么?以及如何确保会话过期后,在重新登录后共享新会话?
这一切都在单个服务器上运行。
在 ASP.Net 中,是否有一种标准方法可以在 Web 请求之间共享资源?
这是我的问题:
话虽如此,让这个会话同时可用于多个页面/请求的最佳方式是什么?以及如何确保会话过期后,在重新登录后共享新会话?
这一切都在单个服务器上运行。
我会将整个 Web 服务包装在一个类似服务的类中,并使用类似 ninject 的 IoC 来管理该服务的实例。然后,您应该在 ninject 中提出一个自定义范围,以使过期的会话无效。
然后在您的 asp .net 中,需要访问该 Web 服务资源的每个请求都应要求 ninject 返回您创建的服务的实例。只要会话有效,ninject 就会设法始终返回相同的实例(假设您已经获得了自定义范围)。
我认为您正在寻找的是用于将数据保存在会话中的“会话”变量。
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
这样,您将在服务器中运行的应用程序中保存状态变量。
如果您的站点在单个服务器上运行,您可以将服务的会话字符串存储在Cache中,它的最大生命周期和可见性对应于服务器进程,而不是客户端的会话之一。
然后,您的代码的任何部分都可以轻松获取当前会话信息,并在缓存中尚未建立新会话。如果您将缓存生命周期设置为略短于服务的会话生命周期,那么您将永远不会看到会话因过期而拒绝您 - 您自己的缓存副本将始终首先过期。