2012-03-22 84 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。

希望這會有所幫助。