2010-12-28 17 views
5

Per favore aiutatemi se potete.REST Servizio WCF e sessione in ASP.NET

Ho cercato di accedere all'oggetto sessione corrente di un'applicazione asp.net da un servizio REST WCF.

Non c'è stato alcun successo. l'oggetto di sessione a cui si accede dal servizio non è lo stesso nelle pagine di aspx.

Quindi, ecco la mia domanda: è possibile accedere alla sessione corrente in un servizio REST REST tramite HttpContext.Current.Session?

Il codice ha i seguenti punti:

[AspNetCompatibilityRequirements 
(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Allowed)] // I have also tried Required 
public class DataService : IDataService 

nel web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="ClosedRoom.DataServiceBehavior"> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" > 
    <baseAddressPrefixFilters> 
     <add prefix="http://localhost:63399"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 

    <services> 
    <service name="ClosedRoom.DataService"> 
     <endpoint address="" behaviorConfiguration="ClosedRoom.DataServiceBehavior" 
     binding="webHttpBinding" contract="ClosedRoom.IDataService" /> 
    </service> 
    </services> 
</system.serviceModel> 

Grazie,

+1

WCF ans ASP.NET sono due tecnologie completamente diverse. Per favore chiarisci la tua domanda. Non è chiaro cosa cerchi di ottenere. Le sessioni ASP.NET sono indipendenti da qualsiasi sessione di servizio WCF che è possibile ospitare nell'applicazione (ASP.NET Web?). – Jan

+0

Prova a scaricare l'applicazione di esempio da http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx e prova a capire cosa ti manca . – decyclone

+0

Chiama il servizio dalla tua applicazione o dal browser? Hai provato a controllare i cookie trasferiti? La sessione in ASP.NET è identificata dal cookie. Se il cookie non viene trasferito con una richiesta di servizio, viene creata una nuova sessione. Btw. I servizi REST dovrebbero essere senza stato = senza alcuna sessione. –

risposta

4

Al fine di una sessione da rehidrated, è necessario fornire una chiave. In una normale applicazione asp.net la chiave viene fornita dall'utente tramite il parametro cookie o url.

Come si prevede di acquisire quella chiave dal client REST? Come quei clienti ottengono quella chiave inizialmente dopo l'autenticazione? Dove conservano la chiave?

Questo è il motivo per cui la maggior parte dei servizi basati su REST utilizza una chiave di accesso API e un'altra chiave per firmare ogni richiesta.

Le sessioni IMHO sono irrilevanti nei progetti basati su REST.

+0

Sono d'accordo con il sentimento di questo post. Penso che l'OP debba aggiungere un altro elemento alla sua architettura. – jcolebrand

+0

@ user6130: Grazie per questa risposta.Proprio come una domanda per me: voglio aggiungere l'id utente in un cookie (che ho impostato al tempo di accesso con una scadenza di scorrimento di 5 minuti) e usarlo per firmare la mia richiesta e controllare il lato server se quell'utente ha accesso ai dati lui cerca di chiedere. Sarebbe considerata una buona pratica? Grazie! :) – Flo

1

So che questa domanda è stato chiesto molto tempo fa, ma questo può essere ottenuto che ospita il servizio WCF riposante all'interno di un'applicazione asp.net e poi sulla parte superiore della vostra classe di servizio aggiungere il seguente attributo:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

in questo modo molte cose tra cui:

HttpContext: servizi WCF in esecuzione in modalità di compatibilità ASP.NET può accedere attuale e il suo stato associato.

Vedi qui per ulteriori informazioni: What does AspNetCompatibilityRequirements really mean?

Problemi correlati