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

C# 如何在asp.net webservices中的webmethods之间交换会话变量,c#,asp.net,web-services,asmx,C#,Asp.net,Web Services,Asmx,我有以下代码将会话变量存储在一个webmethod中,并在另一个webmethod中检索它,但当我尝试检索它时,该值显示为null [WebMethod(EnableSession = true)] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public bool SubmitList1(string businessname ) { Session["Company_Name"] = busin

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

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

        Session["Company_Name"] = businessname;  

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

  }
这将是我尝试检索会话变量的第二个webmethod

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

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

}

我认为您可以在每个WebMethod上使用:
Context.Session[“Company\u Name”]=businessname
,并保留
[WebMethod(EnableSession=true)]

另外,请确保在web.config中启用了configuration>system.web>sessionState模式。如果从web.config关闭sessionstate,则会话状态也无法工作

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

< P>这是一个双柱,所以这里再次出现:

免责声明:我认为依赖会话状态的web服务是完全错误的,因为web服务应该是无状态的。然而:

在,您可以阅读有关如何在web服务中使用ASP.NET会话的内容:

  • 确保web.config中的/configuration/system.web/sessionState已正确配置为启用会话状态
  • 确保使用web服务的用户有一个可以存储ASP.NET会话cookie的cookie容器。如果客户机来自web浏览器(例如ajax调用),这通常是现成的,但是如果您要构建独立的客户机,您必须做更多的工作,请参阅上面的链接 总而言之:一个糟糕的设计决策会给你带来超出必要的工作量(很抱歉插进来)


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

    Hmm,有什么方法可以避免在此处使用会话吗?Web服务(比如HTTP)应该是无状态的——在Web服务中使用会话已经够糟糕的了,更不用说在两个不同的Web方法之间共享会话了。我不知道这是否行得通。ASP.NET可能正在根据web方法序列化会话,因此cookie标识符不同。您能否访问web方法1中的会话[“公司名称”]?如果是这样的话,我的猜测可能是对的。谢谢你的回复,我可以访问string companyname=(string)Session[“Company_Name”];我可以在webmethod1中访问此代码。我给出的解决方案不适合您吗?编写xml您的意思是说构造xml并将其存储到服务器,然后从其他webmethod访问?在我的webconfig文件中,我没有sessionState,我们需要添加任何库吗?您需要:。为此,您无需添加任何参考。保持sessionState mode=“InProc”将允许您使用驻留在内存中的HttpSessionState对象。请告诉我结果,一旦您将上述配置添加到web.config.For编写XML,您所理解的就是我的意思。:-)我正在尝试实现一些安全性,当用户成功登录到我的web应用程序时,我设置了一个会话变量,以确保调用该方法的用户成功登录到我的web应用程序,我在webservice上检查该会话变量,然后仅当他们具有正确的权限时才执行webmethod,从你在这里说的话来看,我做错了,实现我的目标的正确方法是什么?任何链接或信息都将不胜感激,我想用“正确”的方式来做这件事,但我不知道这是什么…我认为这里的问题是技术的选择。如果用户是web应用程序用户,则从何处调用web服务?如果您需要的是来自网页的web服务调用,请改为从javascript发出ajax请求,然后您可以使用web应用程序的身份验证。这就是我需要的,谢谢您的建议:)