2011-09-25 16 views
11

así es como se inicio la sesiónASP.NET + C# HttpContext.Current.Session es nulo (Dentro WebService)

protected void Session_Start(object sender, EventArgs e) 
    { 
     HttpContext.Current.Session["CustomSessionId"] = Guid.NewGuid(); 
    } 

en mi solución bajo una biblioteca de clases que estoy triyng para acceder a ella y conseguir excepción nula :

string sess = HttpContext.Current.Session["CustomSessionId"] ; 

esta es mi configuración en web.config y app.config (en mi biblioteca)

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 
    <system.web> 
     <pages enableSessionState = "true" /> 
     <httpModules> 
     <add type="System.Web.SessionState.SessionStateModule" name="Session"/> 
     </httpModules> 
     <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

(app.config)

+0

¿En qué etapa de la ejecución de la solicitud HTTP llamas al método en tu biblioteca de clase que intenta acceder a la sesión? –

+0

es difícil de decir, pero creo que no es su sesión la que es nula sino el HttpContext.Current, y por cierto: ¿sabe que intenta convertir un Guid en una cadena incluso si esto funciona? – Carsten

+0

En realidad, es dentro de un servicio web que no mencioné (editaré mi publicación) – SexyMF

Respuesta

28

Según sus comentarios, parece que está intentando acceder a la sesión en un servicio web. Los servicios web son sin estado y así es como deben ser. Si quiere violar esta regla y hacerlos con estado que podrían activar las sesiones en un servicio web ASMX clásico como este:

[WebMethod(EnableSession = true)] 
public void SomeMethod() 
{ 
    ... invoke the method in your class library that uses Session 
} 

Dicho esto, el uso de HttpContext.Current en una biblioteca de clases es una práctica que debe evitarse a todo precio

+0

Hasta que pueda marcar la "V" para usted, ¿puede explicar por qué no se recomienda hacerlo? gracias – SexyMF

+1

@putin, hay muchas razones. Por ejemplo HttpContext.Current es un método estático que funciona solo en un contexto web. Esto significa que nunca podrá probar sus funciones de biblioteca de clase en forma aislada si dependieran de ella. Otro inconveniente es que está acoplando activamente su biblioteca de clase a un entorno ASP.NET y las bibliotecas de clase están destinadas a ser componentes reutilizables. En lo que respecta a la parte de la sesión, las sesiones están almacenadas por defecto en la memoria del servidor web. Entonces, por ejemplo, si se ejecuta en una granja de servidores web, la sesión debe distribuirse ... –

+0

... en todos los nodos de esta comunidad web o un cliente que tuvo su sesión creada en el nodo 1 no la encontrará en el nodo2. Las sesiones hacen que las aplicaciones web sean más estables y más difíciles de escalar por ese motivo. Evitarlos a toda costa. Existen muchas otras técnicas en el mundo HTTP que le permitirán lograr aplicaciones sin estado de las que debería beneficiarse. –

Cuestiones relacionadas