如何在asp.net webservices中的webmethods之间交换会话变量

时间:2010-09-14 10:33:43

标签: c# asp.net web-services asmx

我有以下代码将会话变量存储在一个webmethod中并在其他webmethod中检索它,但是当我尝试检索它时,该值显示为null。

[WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
 public bool SubmitList1(string businessname )
    {

        Session["Company_Name"] = businessname;  

        SqlConnection con = new SqlConnection();
             .......
           .........
                .........

  }

这将是我尝试检索会话变量的第二个web方法

[WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public bool addresslisting()
    {

        string companyname = (string)Session["Company_Name"];// this particular value is displaying null
       ......
           ........

}

2 个答案:

答案 0 :(得分:2)

这是how to exchange session or cookie variables between two webmethods in asp.net webservices的双重帖子,所以又来了:

免责声明:我认为依赖于Session状态的Web服务只是简单错误,因为Web服务应该是无状态的。但是:

http://msdn.microsoft.com/en-us/library/aa480509.aspx,您可以阅读有关如何在Web服务中使用ASP.NET Session的信息:

  1. 确保正确配置web.config中的/configuration/system.web/sessionState以启用会话状态
  2. 确保使用Web服务有一个cookie容器,可以存储ASP.NET会话cookie。如果客户端来自Web浏览器(例如ajax调用),这通常是开箱即用的,但如果您要构建独立客户端,则需要做更多工作,请参阅上面的链接。
  3. 总而言之:一个糟糕的设计决定会给你带来超出必要的工作量(抱歉揉搓它)。

    我认为您应该重新设计您的Web服务,以便始终在所有方法中发送用户名和密码,或者添加一个登录方法,为客户端提供随每个Web服务请求一起发送的令牌。

答案 1 :(得分:0)

我认为您可以使用:Context.Session["Company_Name"] = businessname并在每个网络方法上保留[WebMethod(EnableSession = true)]

此外,请确保在web.config中配置> system.web> sessionState模式已启用。如果从web.config关闭sessionstate,那么会话状态也无法工作。

如果您不想使用会话状态,您可以考虑将值写入XML文件,并将UserId / SessionId作为父元素,然后在需要时读取它。