2013-11-25 145 views
1

在ASP.Net中有没有一种标准方式在Web请求之间共享资源?在Web请求之间共享资源?

这是我的问题:

  • 有一个Web服务,我需要从代码查询的后面几页
  • 此Web服务只允许会话中的一个记录在一个时间
  • 如果您登录两次,第一次会话失效
  • 会话存储为字符串,并且每隔45分钟过期,此时我必须重新验证
  • 两个查询可以同时运行因为他们正在使用同一个会话

这就是说,让这个会话同时可用于多个页面/请求的最佳方式是什么?我怎样才能确保一旦会话过期,在重新登录后,新的会话是共享的?

这全部运行在一台服务器上。

回答

0

我想你要找的是用于保持你的数据通过会话的“会话”变量。

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

- 编辑--- .NET的应用对象是你在找什么,它适用于自3.0:msdn.microsoft.com/en-us/library/ms178594(v = vs.85).ASPX

这样你就可以在服务器上运行你的应用程序来保存状态变量。

+1

谢谢,但是这是每个用户,所以如果User1登录,并且创建了Web服务会话,则User2会立即登录;用户1的会话将失效。 –

+0

然后可能是你想要使用内存映射文件,如果你在C#或C++中使用DLL,你可以创建一个命名的共享内存的地方,将由DLL读取,并可以在服务器中使用任何进程和页面。 http://msdn.microsoft.com/en-us/library/dd997372(v=vs.110).aspx –

+0

不幸的是,我正在运行.net 3.5。 –

1

我会将整个web服务包装到一个类似服务的类中,并使用像ninject这样的IoC来管理该服务的实例。然后你应该想出一个custom scope ininject来使过期的会话无效。

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

0

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

然后,您的代码的任何部分都可以轻松掌握当前会话信息,并且在尚未处于高速缓存中的情况下建立新会话很容易。如果您将缓存生存期设置为比服务的会话生存期略短,则永远不会看到会话因为已过期而拒绝您 - 您自己的缓存副本将始终首先到期。