我有一个使用ASP.NET会话状态的WCF Web服务。 WCF为每个请求在会话上设置读写锁定。这意味着我的Web服务每次只能处理一个请求,这会损害我们AJAX应用程序的性能。如何设置ASP.NET SessionState读写锁定超时?
所以我试图找到一种方法来解决这个限制。
- WCF不支持使用只读锁(允许并发访问会话)。
- 我还没找到在处理请求期间手动释放读写锁的方法
- 所以现在我在考虑可能有某种方法将读写锁定超时设置为非常短间隔,以便等待请求不需要等待很长时间。请参阅下面粗体部分。
从MSDN: http://msdn.microsoft.com/en-us/library/ms178581.aspx
“如果两个并发请求为同一会议上提出的第一个请求获取会话信息的独占访问的第一个请求完成后才会第二个请求执行。 (如果由于第一个请求超出锁定超时而释放对信息的排他锁定,第二个会话也可以访问。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则读取请求 - 仅会话信息不会导致对会话数据的独占锁定。“
...但我还没有找到任何有关此锁定超时时间或如何更改它的信息。
你是否需要整个会话状态?你不能提取你需要的东西,并通过DTO吗? – 2010-02-05 01:49:54
我不需要整个会话状态,只需要一些数据。我不知道这是如何解决锁定问题。 – 2010-02-05 01:53:12
我发现,可能与和有关这些不同的特性: HttpContext.Current.Session.IsReadOnly =假 HttpContext.Current.ReadonlySessionState =假 System.Web.SessionState.SessionStateModule.s_configExecutionTimeout =110秒 系统。 Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_DELTA =0.25秒 System.Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_INTERVAL = 500(毫秒?) System.Web.SessionState.SessionStateModule.s_lock = System.Web.Util.ReadWriteSpinLock 。 – 2010-02-05 02:23:50