2012-03-22 15 views
13

Tengo una Clase de inicio de sesión que tiene una función: isCorrect() que toma nombre de usuario y contraseña como dos atributos Y un servicio web asp.net Para permitir el uso de AJAX.La sesión es nula cuando llamo a un servicio web en 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; 
} 

Cuando quiero establecer el valor de Session["loggedinUser"] = thisLoggedinUserID acumula este error:

Object reference not set to an instance of an object.

No puedo entender lo que es la solución.

+0

¿Se puede publicar el seguimiento de pila de excepción? – Dai

+1

ya que su error ocurre en la clase de servicio web only stacktrace que encontré es: en LoginService.CurrectLogin (String username, String password) en f: \ ... \ App_Code \ LoginService.cs: línea 19 – mhesabi

Respuesta

25

Los servicios web no tienen Sesión por defecto. Agregue un atributo al WebMethod ..

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

gracias amigo. mi problema solucionado – mhesabi

1

Parece que el objeto Session es nulo. ¿Estás seguro de que las sesiones están activadas en tu aplicación?

+0

¿cómo puedo saber si está activado? por ejemplo, este es mi web.config mhesabi

0

Las sesiones no funcionan bien en los servicios web C#. Hace algunos meses haría lo mismo que tú, pero cambio el sistema. Ahora estoy usando una identificación de token (usando una capa de persistencia): primero debe iniciar sesión, y cada vez que realice una llamada, debe enviar el token, en un parámetro o un encabezado de soap o algo como esto. Recomiendo usar SSL siempre.

Otra opción es identificar cada llamada al servicio web con inicio de sesión y contraseña en un encabezado SOAP, y usar una extensión SOAP para autenticar o no la llamada del usuario. Este método solo es válido para la comunicación de protocolo SOAP, no para HTTP POST o HTTP GET.

Espero que esto ayude.

Cuestiones relacionadas