我有一个使用ASP.NET会话状态的WCF Web服务。 WCF为每个请求在会话上设置读写锁。这意味着我的Web服务每个用户一次只能处理一个请求,这会损害我们AJAX应用程序的感知性能。
所以我试图找到解决这个限制的方法。
来自MSDN: http://msdn.microsoft.com/en-us/library/ms178581.aspx
“如果对同一会话发出两个并发请求,则第一个请求将获得对会话信息的独占访问权限。第二个请求仅在第一个请求完成后执行。(第二个会话也可以访问由于第一个请求超过锁定超时,因此释放对信息的独占锁定。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则不会产生对只读会话信息的请求在对会话数据的独占锁定中。“
...但我没有找到有关此锁定超时时间或更改方式的任何信息。
答案 0 :(得分:1)
我可以告诉你,httpRuntime执行超时控制了这个锁定时间,但是,该字段的文档说明此时应该终止该线程。我从经验中知道这个线程没有终止并且最终将返回数据,但是生成了一个新线程来处理队列中的请求。
默认情况下,此值在2.0 asp之后为110秒,之前为90秒。我会担心这种行为在未来发生变化并被“修复”。
答案 1 :(得分:0)
有没有人尝试过使用SQLSessionStateProvider并修改SP?我在开发中做了这个,似乎解决了锁定问题,但不确定它是否有任何副作用。基本上我所做的是更改获得Exclusive锁的3个SP,以便Lock列始终设置为0。