【问题标题】:Readonly access to session in a web service call?只读访问 Web 服务调用中的会话?
【发布时间】:2010-10-30 11:00:52
【问题描述】:

我们有一个 .net asmx Web 服务,它从 javascript(使用 ASP.Net AJAX)调用,并且需要访问 Session。

[WebMethod(true)]
public string DoSomethingOnTheServer() { }

我们遇到了会话被锁定在读/写请求上的问题。有什么方法可以将 Web 服务方法标记为需要对 Session 进行只读访问?

谢谢!

【问题讨论】:

    标签: asp.net web-services webforms session-state


    【解决方案1】:

    根据 WebMethod 属性的 MSDN documentation,有几个可能的属性,所以我不确定您的 WebMethod 属性中的“真实”值会做什么。

    你试过了吗:

    [WebMethod(EnableSession=true)]
    

    根据this document,这应该可以让您完全访问会话。

    【讨论】:

    • 问题是该方法允许读取和写入访问...我正在寻找一种方法来打开读取访问(当您有多个同时请求时打开写入访问会导致阻塞)。但是,我不相信有办法。
    • 啊哈,现在我明白了...现在我已经进行了更多搜索,您可以将页面设置为只读访问权限,而不是 Web 访问权限没有多大意义服务。如果您将 WebMethods 放在 aspx 页面中(公开为 WebMethods)并将页面的 EnableSessionState 属性设置为 ReadOnly 会怎样?这不是最好的解决方案,但它可能会奏效。
    • 将 webmethods 放在 aspx 页面中,EnableSessionState 属性设置为 ReadOnly 有效。请求将同时处理。谢谢@PhillFox
    【解决方案2】:

    这个http://msdn.microsoft.com/en-us/library/aa480509.aspx 页面似乎暗示答案是否定的——您不能将WebSerivce 标记为具有EnableSessionState=ReadOnly

    如果您从同一个进程同时进行 Web 服务调用,则请求将在服务器上进行序列化,以便在任何时候只执行一个请求。与支持对 HttpSessionState 对象的只读访问(允许同时处理多个请求)的 .ASPX 页面不同,ASP.NET Web 服务没有这种功能。所有启用会话的 Web 方法调用都具有读/写访问权限,并将在每个会话中进行序列化。

    警告:那篇文章已过时 (2002)。

    【讨论】:

    • 旧的,但似乎仍然适用:(
    【解决方案3】:

    这是一个非常古老的线程,但我在寻找相同问题的答案时偶然发现了它。

    我在其他地方找到了答案,并将其留在这里供其他互联网使用:

    在 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服务对会话始终只有只读权限,不会阻塞其他请求

    【讨论】:

    • 米凯尔,你是我的英雄
    • 我已经尝试解决这个问题超过 30 个小时。它适用于 web 方法,使方法本身只读,这在 ASP.NET 表单中是不可能的。只需使用Contains("MethodName")
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多