2010-04-23 14 views
5

Ho un'applicazione asp.net e servizi web (asmx) che risiedono nella stessa applicazione ma non nella stessa cartella dei file aspx. Ho anche un'applicazione Winform che utilizza i servizi web. Ho contrassegnato i metodi webservice con [WebMethod (EnableSession = true)] ma non sono in grado di condividere gli stessi valori di sessione presenti nell'applicazione nei servizi web. L'applicazione WinForm ha accesso al sessionID dall'applicazione e sto usando il seguente codiceCondivisione della sessione tra il servizio web e l'applicazione asp.net

Uri uri = new Uri(ServerServiceUrl); 
_cookieContainer = new CookieContainer(); 
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host)); 

La mia domanda è: C'è qualcosa che mi manca o facendo male che non posso accedere al sessioin applicazione dalle webservices?

+3

Perché sono necessarie sessioni in un servizio web? Stai memorizzando uno stato temporaneo? In tal caso, i servizi IMO dovrebbero essere privi di stato e con questo, il tuo problema non esisterebbe ... – Sunny

+0

D'accordo, dovrai pensare ai servizi web come le classi statiche – Pierreten

+0

I miei servizi aspx, proprio come l'applicazione, parlano ai servizi web java e quando l'applicazione chiama i servizi, memorizza nella cache i valori per un periodo di tempo. Invece di chiamare i servizi java più e più volte voglio utilizzare i dati che sono stati memorizzati nella cache dell'applicazione. Quindi perché voglio condividere la sessione. –

risposta

1

Non riesco a far luce sul motivo per cui non si è in grado di far sì che l'app winforms "dirottamenti" la sessione: ciò che si sta facendo sembra che dovrebbe fare esattamente ciò che si desidera.

Volevo solo suggerire di utilizzare la cache dell'applicazione (per memorizzare nella cache la risposta dal servizio java dell'utente) invece dell'archivio sessioni dell'utente. Questo ha i seguenti vantaggi: -

  • a) Se le informazioni memorizzate nella cache è applicabile a più di un singolo utente (ad esempio accesso controllato), quindi le stesse informazioni memorizzate nella cache può essere utilizzato per più utenti e non recuperati per ogni sessione .
  • b) Hai più controllo sul tempo in cui le cose vengono memorizzate nella cache per/quando vengono scavate rispetto a quelle ottenute con i dati di sessione (che sopravvive per tutta la vita della sessione e ha il rischio di crescere e crescere se si dimentica di eliminare informazioni precedenti)
  • c) Se non si riesce a far funzionare il dirottamento di sessione, è comunque possibile accedere ai dati nella cache da qualsiasi sessione.
0

Hai provato ad ereditare la classe del servizio web da System.Web.SessionState.IRequiresSessionState?

Viene normalmente utilizzato per i gestori HTTP, ma i servizi Web sembrano utilizzare la stessa interfaccia marker.

+0

Non l'ho provato, ma, a quanto ho capito, aggiungendo [WebMethod (EnableSession = true)] su ciascun metodo rende le sessioni abilitate. Ho a disposizione una variabile di sessione, è solo che è una nuova sessione e non la sessione è già stata creata sull'applicazione. –

+0

Appena realizzato. Stai accedendo al servizio web dalla stessa macchina? in tal caso sei sicuro che dovresti usare "uri.Host" e non l'interfaccia di loopback quando imposti il ​​tuo cookie? – Radu094

Problemi correlati