我有以下代码将会话变量存储在一个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
......
........
}
答案 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的信息:
总而言之:一个糟糕的设计决定会给你带来超出必要的工作量(抱歉揉搓它)。
我认为您应该重新设计您的Web服务,以便始终在所有方法中发送用户名和密码,或者添加一个登录方法,为客户端提供随每个Web服务请求一起发送的令牌。
答案 1 :(得分:0)
我认为您可以使用:Context.Session["Company_Name"] = businessname
并在每个网络方法上保留[WebMethod(EnableSession = true)]
。
此外,请确保在web.config中配置> system.web> sessionState模式已启用。如果从web.config关闭sessionstate,那么会话状态也无法工作。
如果您不想使用会话状态,您可以考虑将值写入XML文件,并将UserId / SessionId作为父元素,然后在需要时读取它。