2012-03-22 25 views
13

Tôi có một lớp đăng nhập có chức năng: isCorrect() lấy tên người dùng và mật khẩu làm hai thuộc tính Và một WebService asp.net Để cho phép sử dụng AJAX.Session is null khi gọi một dịch vụ web trong ASP.NET C#

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; 
} 

Khi tôi muốn thiết lập giá trị của Session["loggedinUser"] = thisLoggedinUserID lỗi này tích lũy:

Object reference not set to an instance of an object.

Tôi không thể hiểu giải pháp là gì.

+0

Bạn có thể đăng theo dõi ngăn xếp ngoại lệ không? – Dai

+1

vì lỗi của nó xảy ra trên lớp webservice chỉ stacktrace tôi tìm thấy là: tại LoginService.CurrectLogin (String tên người dùng, String mật khẩu) trong f: \ ... \ App_Code \ LoginService.cs: dòng 19 – mhesabi

Trả lời

25

Dịch vụ web không có Phiên theo mặc định. Thêm thuộc tính vào WebMethod ..

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

cảm ơn bạn đời. vấn đề của tôi đã được giải quyết. – mhesabi

1

Có vẻ như đối tượng Phiên là null. Bạn có chắc chắn các phiên được bật trong ứng dụng của mình không?

+0

làm thế nào tôi có thể biết nếu nó trên? ví dụ đây là web.config của tôi mhesabi

0

Phiên không hoạt động tốt trong Dịch vụ web C#. Vài tháng trước tôi sẽ làm tương tự như bạn, nhưng tôi thay đổi hệ thống. Bây giờ tôi đang sử dụng một mã nhận diện (sử dụng một lớp kiên trì): Trước tiên, bạn phải đăng nhập, và mỗi khi bạn thực hiện cuộc gọi, bạn phải gửi mã thông báo, trong một tham số hoặc một tiêu đề xà phòng hoặc một cái gì đó như thế này. Tôi khuyên bạn nên sử dụng SSL luôn.

Tùy chọn khác là nhận dạng mọi cuộc gọi dịch vụ web bằng thông tin đăng nhập và mật khẩu trong SOAPHeader và sử dụng SOAPExtension để tự xác thực hoặc không phải người dùng gọi. Phương thức này chỉ hợp lệ cho giao tiếp giao thức SOAP, không phải cho HTTP POST hoặc HTTP GET.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan