2012-03-22 12 views
13

Ho una classe di accesso che ha una funzione: isCorrect() che accetta nome utente e password come due attributi E un asp.net WebService Per consentire l'utilizzo di AJAX.La sessione è nullo quando si chiama un servizio Web in 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; 
} 

Quando voglio impostare il valore di Session["loggedinUser"] = thisLoggedinUserID questo errore è attribuito:

Object reference not set to an instance of an object.

non riesco a capire che cosa è la soluzione.

+0

È possibile pubblicare la traccia dello stack di eccezioni? – Dai

+1

poiché il suo errore si verifica sulla classe webservice, lo stacktrace che ho trovato è: su LoginService.CurrectLogin (String nome utente, stringa password) in f: \ ... \ App_Code \ LoginService.cs: riga 19 – mhesabi

risposta

25

I servizi Web non dispongono di Sessione per impostazione predefinita. Aggiungi un attributo al WebMethod.

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

grazie amico. il mio problema risolto. – mhesabi

1

Sembra che l'oggetto Session sia null. Sei sicuro che le sessioni siano attive nella tua applicazione?

+0

come posso sapere se è attivo? per esempio questo è my web.config mhesabi

0

Le sessioni non funzionano bene in Servizi Web C#. Pochi mesi fa farei lo stesso come te, ma cambio il sistema. Ora sto usando un'identificazione token (usando un livello di persistenza): per prima cosa devi effettuare il login, e ogni volta che effettui una chiamata, devi inviare il token, in un parametro o un'intestazione soap o qualcosa del genere. Raccomando di usare SSL sempre.

Un'altra opzione è identificare ogni chiamata di servizio Web con accesso e password in un SOAPHeader e utilizzare una SOAPExtension per autenticarsi o meno la chiamata dell'utente. Questo metodo è valido solo per la comunicazione con protocollo SOAP, non per HTTP POST o HTTP GET.

Spero che questo aiuti.

Problemi correlati