2012-03-22 44 views
13

我有一个Login Class,它有一个函数:isCorrect(),它将用户名和密码作为两个属性,并且一个asp.net WebService允许使用AJAX。在ASP.NET C中调用Web服务时,会话为空#

LoginService.cs

public Login CorrectLogin(string username, string password) 
{ 
    Login thisLogin = Login.isCorrect(username, password); 
    int thisLoggedinUserID = thisLogin.LoggedinUserID; 

    if (thisLoggedinUserID != 0) 
    { 
     Session["loggedinUser"] = thisLoggedinUserID; 
    } 

    return thisLogin; 
} 

当我想设置的Session["loggedinUser"] = thisLoggedinUserID值这个错误累积:

Object reference not set to an instance of an object.

我不明白什么是解决方案。

+0

你能发布异常堆栈跟踪吗? – Dai 2012-03-22 20:39:44

+1

因为它的错误只发生在webservice类上,我发现stacktrace是:在loginService.CurrectLogin(字符串用户名,字符串密码)在f:\ ... \ App_Code \ LoginService.cs中:第19行 – mhesabi 2012-03-22 21:01:53

回答

25

Web服务默认没有Session。将属性添加到WebMethod ..

[WebMethod(EnableSession=true)] 
public Login CurrentLogin ..... 
+0

谢谢队友。我的问题解决了。 – mhesabi 2012-03-22 21:06:21

1

看起来像会话对象为空。您确定会话在您的应用程序中打开吗?

+0

我怎么知道它的on?例如这是我的web.config mhesabi 2012-03-22 21:01:01

0

会话在Web服务c#中无法正常工作。几个月前我会和你一样,但是我改变了系统。现在我正在使用一个令牌标识(使用持久层):首先,您必须登录,并且每次您打电话时,都必须在一个参数或soap标头或类似的东西中发送令牌。我建议始终使用SSL。

另一种选择是使用SOAPHeader中的登录名和密码标识每个Web服务调用,并使用SOAPExtension来验证用户调用或不调用。此方法仅适用于SOAP协议通信,不适用于HTTP POST或HTTP GET。

希望这会有所帮助。