【发布时间】:2015-03-11 15:17:39
【问题描述】:
我有一个简单的 ASP.NET C# 网页;让我们说default.aspx。那里有一个按钮;单击该按钮在后面的代码中执行以下操作:
Session["groupid"] = 1;
值 1 实际上显示在文本框上。到现在为止还挺好。然后我在 .asmx 文件中也有一个 Web 服务,与 default.aspx 页面处于同一级别。该 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
}
}
在上面的代码中,Session对象中确实有一个'groupid'键,但是它没有值;它应该有 1 作为值。困扰我的是该值不为空,但没有实际数据。
有什么想法吗?
谢谢。
【问题讨论】:
-
您在哪里调用/使用或创建 Web 服务的实例..?您能否确认您甚至可以进入 Web 服务代码..?我还建议将
Session["groupid"] = 1;更改为使用HttpContext.Current.Session["groupid"] = 1并在 global.asax OnSessionStart 方法中对其进行初始化。你能提供更多相关的代码吗?在您的代码中显示您正在调用GetRoomDataAttributes() -
是的,我可以单步执行 Web 服务代码,这就是它不显示为 null 的原因。基本上,我通过一个标准的 html 按钮使用 Ajax 方法,该按钮调用 .asmx Web 服务,然后我可以逐步完成。在此之前,如果我按下 ASP.NET 按钮手动设置会话,那么只有 Web 服务的 Session 变量不为空。
-
我认为您需要在 Web Service 内部创建一个属性,然后在为 Web Service 创建实例时,将已初始化的属性值分配给 Session 变量。在我看来,这将是一个简单的解决方案
-
@Meengla “值不为空但没有实际数据”是什么意思?如果不是
null,它应该有一些价值——你有没有机会在同一个键下写其他东西? -
Alexei:是的,这就是我的意思:在会话对象的“键”中,我看到一个键名 groupid,但是当分配给一个字符串变量时,它是空的。
标签: c# asp.net web-services session