variable sessionstate net mvc httpsessionstate devolvió current asp c# asp.net iis httpcontext

c# - sessionstate - session mvc net core



¿Por qué HttpContext.Current es nulo? (3)

Claramente HttpContext.Current no es null solo si accede a él en un hilo que maneja las solicitudes entrantes. Es por eso que funciona "cuando uso este código en otra clase de una página".

No funcionará en la clase relacionada con la programación porque el código relevante no se ejecuta en un hilo válido, sino un hilo de fondo, que no tiene un contexto HTTP asociado.

En general, no use la Application["Setting"] para almacenar productos globales, ya que no son globales como descubrió.

Si necesita pasar cierta información a la capa de lógica de negocios, pase como argumentos a los métodos relacionados. No permita que su capa de lógica empresarial acceda a cosas como HttpContext o Application["Settings"] , ya que eso viola los principios de aislamiento y desacoplamiento.

Tengo un valor que utilizo en toda la aplicación; Configuré esto en application_start

void Application_Start(object sender, EventArgs e) { Dictionary<int, IList<string>> Panels = new Dictionary<int, IList<string>>(); List<clsPanelSetting> setting = clsPanelSettingFactory.GetAll(); foreach (clsPanelSetting panel in setting) { Panels.Add(panel.AdminId, new List<string>() { panel.Phone,panel.UserName,panel.Password}); } Application["Setting"] = Panels; SmsSchedule we = new SmsSchedule(); we.Run(); }

y en SmsSchedule

public class SmsSchedule : ISchedule { public void Run() { DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second); IJobDetail job = JobBuilder.Create<SmsJob>() .WithIdentity("job1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1") .StartAt(startTime) .WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()) .Build(); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sc = sf.GetScheduler(); sc.ScheduleJob(job, trigger); sc.Start(); } }

Quiero obtener este valor en una clase. (Smsjob)

public class SmsJob : IJob { public virtual void Execute(IJobExecutionContext context) { HttpContext.Current.Application["Setting"]; } }

pero mi problema es: HttpContext.Current es nulo, ¿por qué HttpContext.Current es nulo?

Editar: Cuando uso este código en otra clase de una página funciona, pero en esta clase obtengo el error.


En IIS7 con modo integrado, Current no está disponible en Application_Start . Hay un hilo similar here .


intente implementar Application_AuthenticateRequest lugar de Application_Start .

este método tiene una instancia para HttpContext.Current , a diferencia de Application_Start (que se activa muy pronto en el ciclo de vida de la aplicación, lo suficientemente pronto como para no contener aún un objeto HttpContext.Current ).

Espero que ayude.