Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET会话值是否未携带到Web服务?_C#_Asp.net_Web Services_Session - Fatal编程技术网

C# ASP.NET会话值是否未携带到Web服务?

C# ASP.NET会话值是否未携带到Web服务?,c#,asp.net,web-services,session,C#,Asp.net,Web Services,Session,我有一个简单的ASP.NET C#网页;让我们说default.aspx。里面有一个按钮;单击该按钮可在代码隐藏中执行以下操作: Session["groupid"] = 1; 1的值实际上显示在一个文本框中。到现在为止,一直都还不错。然后,我在.asmx文件中还有一个Web服务,与default.aspx页面处于同一级别。Jquery Ajax函数正在调用该web服务。我尝试使用会话变量groupid执行一些sql查询。以下是我在Web服务中的代码: [WebMethod(EnableSes

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

Session["groupid"] = 1;
1的值实际上显示在一个文本框中。到现在为止,一直都还不错。然后,我在.asmx文件中还有一个Web服务,与default.aspx页面处于同一级别。Jquery Ajax函数正在调用该web服务。我尝试使用会话变量
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。困扰我的是,该值不是null,但没有实际数据

有什么想法吗


谢谢。

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


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

建立我的会话变量并使web服务识别会话的密钥值没有问题。我想我的问题是试图解析值。下面是我最后完成的解析:

 if (HttpContext.Current.Session["groupid"] != null)
  {
    int? session_groupid = (int?)Session["groupid"];
  }
这让我很沮丧,但我学到了一些新东西。谢谢大家的帮助


HTH.

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

实际上,您要问的是:如果会话变量
group\u id
是字符串,则将其设置为
session\u id
。好吧,那永远不会是真的,因为它是一个
int

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

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

您在哪里调用/使用或创建web服务的实例。。?您是否可以确认您甚至可以进入web服务代码。。?我还建议将
会话[“groupid”]=1
使用
HttpContext.Current.Session[“groupid”]=1
并在global.asax OnSessionStart方法中初始化它。你能提供更多相关的代码吗。在代码中显示调用的位置
GetRoomDataAttributes()
是的,我可以单步查看Web服务代码,这就是它不显示为null的原因。基本上,我通过一个调用.asmxweb服务的标准html按钮使用Ajax方法,然后我可以逐步完成。在此之前,如果我按ASP.NET按钮手动设置会话,则只有Web服务的会话变量不为null。我认为您需要在Web服务内部创建一个属性,然后在为Web服务创建实例时,分配已初始化的属性值,即会话变量。这对我来说是一个简单的解决办法opinion@Meengla“值不为空但没有实际数据”是什么意思?如果它不是
null
它应该有一些值-你有没有可能也在同一个键下写其他东西?Alexei:是的,这就是我的意思:在session对象的“Keys”中,我看到一个键名groupid,但当分配给字符串变量时,它是null。我想避免在default.aspx页面中携带会话的组id;这只是一个测试页面;最后一个调用将来自一个javascript.js文件——它将首先调用另一个函数来建立会话中的登录凭据。那么这个javascript文件是否独立地建立web服务和asp页面的凭据?两个系统的身份验证机制是否等效?目前没有javascript文件。default.aspx文档是一个测试页面,用于手动建立会话凭据。最后一个页面将是一个.aspx页面,其中大部分包含javascript代码。其中一些代码将显示一个登录框,并将数据传递给将在会话对象中建立凭据的Web服务。是的,身份验证也是一样的。稍微修改了这个问题以显示字符串变量——它没有得到1Yes的值,但是正如你所看到的,我在你的答案之前给出了我自己的答案。你还是解释了。我很感激。我的问题是,在调试器中,我没有看到groupid键的任何值。所以我试着把它赋给一个字符串变量,然后在SQL中使用;但那个字符串变量总是空的,我知道。你知道如何修复它,但不知道为什么它不起作用。希望我能澄清,是的。好的,如果你愿意的话:那么你的代码在做什么?我不太明白?它是否将会话变量强制转换为Int类型?表达式开头的“int”是什么?谢谢。这是
int
类型的可空版本。您也可以在此处使用
作为
,但不应该,因为您知道手边的类型。由于
int
不能为null,因此需要
int?
可以。它直接将会话变量中的值强制转换为int,如果变量未填充,则int可以为null。