C# 获取.NET ASMX web服务中的会话

C# 获取.NET ASMX web服务中的会话,c#,asp.net,web-services,session-state,C#,Asp.net,Web Services,Session State,我的ASP.NET web应用程序旁边有一个ASMX web服务。现在,我需要让用户会话进入Web服务。为了测试这一点,我采用了以下简单方法: [WebMethod(EnableSession = true)] public string checkSession() { return HttpContext.Current.Session["userid"].ToString(); } 因此,首先我登录到我的web应用程序,然后在浏览器中转到我

我的ASP.NET web应用程序旁边有一个ASMX web服务。现在,我需要让用户会话进入Web服务。为了测试这一点,我采用了以下简单方法:

    [WebMethod(EnableSession = true)]
    public string checkSession()
    {
        return HttpContext.Current.Session["userid"].ToString();
    }
因此,首先我登录到我的web应用程序,然后在浏览器中转到我的web服务,并在自动生成的测试页面上单击“checkSession”。我已经在3台电脑上测试过了。这三种方法都可以与webapp配合使用(因此正在创建会话等),其中两种方法在调用webmethod时返回会话[“userid”]的值,但是最后一台计算机返回“对象引用未设置为对象实例”,因为会话为空


那么,这些计算机之间有什么区别?为什么我的ASP.NET应用程序可以在所有计算机上获取会话,但Web服务无法获取会话?

会话ID默认情况下作为cookie存储在客户端浏览器上()。因此,检查cookie是否在有问题的计算机上正确创建。可能是因为某种原因禁用了cookie?在这种情况下,当您点击该web服务时,它不会将SessionID发送到服务器。

如果您在IIS中禁用了会话,这将通过rule.net实现

看看这个-它告诉你如何禁用会话,但显示了在哪里检查设置

谢谢
Fran默认情况下,web服务是并且应该是无状态的。但是,如果必须使用会话信息,请确保使用标记接口IReadOnlySessionState和IRequiresessionState,以便访问、使用或修改Web服务中的会话状态信息。

在会话不为空之前进行此方法检查的最佳方法,并在会话的另一端进行检查 使用您的值初始化所选会话,然后在何时何地使用httpcontext.current.session的web服务具有值


web服务是无状态的,最好的方法是在web服务中获取值,而不是设置或初始化会话值。您可以检查应用程序使用了多少个工作进程吗?您可以在IIS的应用程序池设置中检查它


如果正在使用多个辅助进程,则调用它来运行web garden。如果是这种情况,则进程内会话将不起作用,因为工作进程之间不共享此会话。查看一下

默认情况下,Web服务不支持会话。您需要在web方法属性中显式指定参数

这两件事对我很有用

  • 标记中的
    enableSessionState=“true”


  • 也许太晚了,但你试过这个吗:

    [WebMethod(EnableSession = true)]
    public string checkSession()
    {
        return HttpContext.Current.Session.SessionID
    }
    

    会话对象可通过以下方式访问:

    var session = this.Session;
    var contextSession = this.Context.Session;
    

    您如何存储会话?如果在proc中,您需要asmx webservice在与webapp相同的应用程序池上运行。你是不是一直在那台机器上出现会话错误?我真的不知道。我所做的就是,当他们最初登录ASP.NET端时,我设置:Session[“userid”]=theiridfromdb;首先,如何检查它是否在进程中,然后如何在同一个应用程序池中运行webservice?是的,那台计算机总是给出错误。看起来inproc是默认的,所以是的,我正在使用它。我在一个运行IIS6的专用服务器上运行这个程序,ASP.NET站点和Web服务是一个应用程序。与中一样,它们是IIS中的同一应用程序,Visual Studio将它们的两个后端编译到同一DLL。请参阅本文:启用会话的web服务-另一方面-您不应该对可能为null的对象调用ToString()-应该先检查null。这是1和2,还是1或2?1和2;执行第一步&然后在第二页启用sessionState(步骤2)。这正是我需要知道的,它修复了我的空会话问题。我只是将[WebMethod(EnableSession=true)]放在我的方法上,它返回其他数据。非常感谢。