我们有一个 .net asmx Web 服务,它从 javascript(使用 ASP.Net AJAX)调用,并且需要访问 Session。
[WebMethod(true)]
public string DoSomethingOnTheServer() { }
我们遇到了会话被读/写请求锁定的问题。有什么方法可以将 Web 服务方法标记为需要对 Session 进行只读访问?
谢谢!
我们有一个 .net asmx Web 服务,它从 javascript(使用 ASP.Net AJAX)调用,并且需要访问 Session。
[WebMethod(true)]
public string DoSomethingOnTheServer() { }
我们遇到了会话被读/写请求锁定的问题。有什么方法可以将 Web 服务方法标记为需要对 Session 进行只读访问?
谢谢!
这是一个非常古老的线程,但我在寻找相同问题的答案时偶然发现了它。
我在其他地方找到了答案,并将其留给我所在的其他互联网:
在 Global.asax 中,您可以为每个请求指定该请求对会话对象的访问权限,以及它是否应该阻止。
private void Application_BeginRequest(object sender, EventArgs e)
{
// This will set the session to read only for asmx services
// This will make the asmx services non blocking for other requests as it doesnt lock the session object
if (Context.Request.Path.Contains(".asmx/"))
{
Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
}
}
这样 asmx 服务始终只有对会话的只读访问权限,不会阻塞其他请求
这个http://msdn.microsoft.com/en-us/library/aa480509.aspx页面似乎表明答案是“否” - 您不能将 WebSerivce 标记为具有EnableSessionState=ReadOnly
.
如果您从同一个进程同时进行 Web 服务调用,则请求将在服务器上序列化,以便在任何时候只执行一个请求。与支持对 HttpSessionState 对象的只读访问(允许同时处理多个请求)的 .ASPX 页面不同,ASP.NET Web 服务没有这种功能。所有启用会话的 Web 方法调用都具有读/写访问权限,并将在每个会话中进行序列化。
警告:那篇文章很旧(2002 年)。
根据 WebMethod 属性的MSDN 文档,有几个可能的属性,所以我不确定 WebMethod 属性中的“真实”值会做什么。
你有没有尝试过:
[WebMethod(EnableSession=true)]
根据this document,您应该可以完全访问会话。