2010-12-28 43 views
5

Por favor, ayuda si puedes.RESTO Servicio WCF y sesión en ASP.NET

He intentado acceder al objeto de sesión actual de una aplicación asp.net desde un servicio WCF REST.

No ha habido ningún éxito en absoluto. el objeto de sesión al que se accede desde el servicio no es el mismo en las páginas aspx.

Entonces, aquí está mi pregunta: ¿Es posible acceder a la sesión actual en un REST servicio WCF a través de HttpContext.Current.Session?

El código tiene los siguientes puntos:

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

en 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> 

Gracias,

+1

WCF ans ASP.NET son dos tecnologías completamente diferentes. Por favor aclara tu pregunta. No está claro lo que intentas lograr. Las sesiones de ASP.NET son independientes de cualquier sesión de servicio de WCF que pueda albergar en su aplicación (ASP.NET web?). – Jan

+0

Intente descargar la aplicación de muestra desde http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx y trate de averiguar qué es lo que falta. . – decyclone

+0

¿Llamas al servicio desde tu aplicación o desde el navegador? ¿Intentó verificar las cookies transferidas? La sesión en ASP.NET se identifica por cookie. Si la cookie no se transfiere con una solicitud de servicio, se crea una nueva sesión. Por cierto. Los servicios REST deben ser sin estado = sin ninguna sesión. –

Respuesta

4

Con el fin de que una sesión se rehidrated, es necesario suministrar una llave. En una aplicación asp.net normal, el usuario proporciona la clave a través del parámetro cookie o url.

¿Cómo piensa adquirir esa clave del cliente REST? ¿Cómo esos clientes obtienen esa clave inicialmente después de la autenticación? Donde almacenan la llave?

Esta es la razón por la cual la mayoría de los servicios basados ​​en REST tienen una clave de acceso api y también otra clave para firmar cada solicitud.

Las sesiones de IMHO son irrelevantes en los diseños basados ​​en REST.

+0

Estoy de acuerdo con el sentimiento de esta publicación. Creo que el OP necesita agregar otro elemento a su arquitectura. – jcolebrand

+0

@ user6130: Gracias por esta respuesta. – Flo

1

Sé que se hizo esta pregunta hace mucho tiempo, pero esto se puede lograr mediante el servicio de alojamiento reparador WCF dentro de una aplicación asp.net y luego en la parte superior de su clase de servicio agregue el atributo siguiente:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

Esto permite a muchas cosas, incluyendo:

HttpContext: servicios WCF que se ejecutan en modo de compatibilidad de ASP.NET puede acceder actual y su estado asociado.

Consulte aquí para obtener más información: What does AspNetCompatibilityRequirements really mean?

Cuestiones relacionadas