如何设置ASP.NET SessionState读写LOCK超时?

时间:2010-02-05 01:47:17

标签: asp.net wcf session-state

我有一个使用ASP.NET会话状态的WCF Web服务。 WCF为每个请求在会话上设置读写锁。这意味着我的Web服务每个用户一次只能处理一个请求,这会损害我们AJAX应用程序的感知性能。

所以我试图找到解决这个限制的方法。

  • WCF不支持使用只读锁(然后允许并发访问会话)。
  • 我没有找到在处理请求期间手动释放读写锁的方法
  • 所以现在我认为可能有某种方法可以将读写锁定超时设置为某个非常短的时间间隔,以便等待请求不需要等待很长时间。请以粗体显示以下部分。

来自MSDN: http://msdn.microsoft.com/en-us/library/ms178581.aspx

“如果对同一会话发出两个并发请求,则第一个请求将获得对会话信息的独占访问权限。第二个请求仅在第一个请求完成后执行。(第二个会话也可以访问由于第一个请求超过锁定超时,因此释放对信息的独占锁定。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则不会产生对只读会话信息的请求在对会话数据的独占锁定中。“

...但我没有找到有关此锁定超时时间或更改方式的任何信息。

2 个答案:

答案 0 :(得分:1)

我可以告诉你,httpRuntime执行超时控制了这个锁定时间,但是,该字段的文档说明此时应该终止该线程。我从经验中知道这个线程没有终止并且最终将返回数据,但是生成了一个新线程来处理队列中的请求。

默认情况下,此值在2.0 asp之后为110秒,之前为90秒。我会担心这种行为在未来发生变化并被“修复”。

答案 1 :(得分:0)

有没有人尝试过使用SQLSessionStateProvider并修改SP?我在开发中做了这个,似乎解决了锁定问题,但不确定它是否有任何副作用。基本上我所做的是更改获得Exclusive锁的3个SP,以便Lock列始终设置为0。