ASP.NET会话值没有被带到Web服务?

时间:2015-03-11 15:17:39

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

我有一个简单的ASP.NET C#网页;让我们说default.aspx。在那里有一个按钮;单击该按钮会在后面的代码中执行以下操作:

Session["groupid"] = 1;

并且值1实际显示在文本框中。到现在为止还挺好。然后我在.asmx文件中也有一个与default.aspx页面相同级别的Web服务。该Web服务由Jquery Ajax函数调用。我想要做的是使用groupid的会话变量进行一些SQL查询。这是我在Web服务中的代码:

[WebMethod(EnableSession = true)]
public string GetRoomDataAttributes()
{
  if (Session["groupid"] != null)//always has no value?
   {
      string session_groupid = HttpContext.Current.Session["groupid"] as string;// *** edit: this should have the value of 1
   }

}

在上面的代码中,确实有一个' groupid'在Session对象中,但它没有值;它应该有1作为值。困扰我的是,该值不为空,但没有实际数据。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

ASMX服务和ASP.NET页面实际上并没有使用相同的会话 - 这就是为什么值不会从一个会话转移到另一个会话。

连接到Web服务时,应确保Web服务客户端也将会话令牌从ASPX传递到ASMX。

答案 1 :(得分:0)

建立会话变量并使Web服务识别会话的关键值时没有问题。我认为我的问题是试图解析价值。这是我最终做的解析:

 if (HttpContext.Current.Session["groupid"] != null)
  {
    int? session_groupid = (int?)Session["groupid"];
  }

非常沮丧地想出这个但是学到了一些新东西。谢谢大家的帮助!

HTH。

答案 2 :(得分:0)

问题是您尝试使用int运算符将string值(1)解析为as

实际上你要问的是:如果它是一个字符串,请将session_id设置为会话变量group_id 。好吧,那永远不会是真的,因为它是int

您可以直接将其分配给int?,因为它会正确转换null个值:

int? session_groupid = (int?)HttpContext.Current.Session["groupid"];