programing

HttpContext는 왜입니까?현재 null?

itmemos 2023. 6. 26. 21:05
반응형

HttpContext는 왜입니까?현재 null?

모든 응용 프로그램에 사용하는 값이 있습니다. 이 값은 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();

  }

및 SMS 스케줄에서

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();
    }
}

클래스에서 이 값을 얻고 싶습니다. (smsjob)

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

하지만 제 문제는: HttpContext입니다.현재는 null이고 HttpContext는 왜입니까?현재 null?

편집: 페이지의 다른 클래스에서 이 코드를 사용하면 작동하지만 이 클래스에서는 오류가 발생합니다.

확실히.HttpContext.Current아닙니다null수신 요청을 처리하는 스레드에서 액세스하는 경우에만 가능합니다.그것이 "내가 페이지의 다른 클래스에서 이 코드를 사용할 때" 작동하는 이유입니다.

관련 코드가 유효한 스레드에서 실행되지 않고 HTTP 컨텍스트가 연결되지 않은 백그라운드 스레드에서 실행되므로 스케줄링 관련 클래스에서 작동하지 않습니다.

전체적으로 사용 안 함Application["Setting"]당신이 발견한 것처럼 글로벌하지 않기 때문에 글로벌한 물건을 저장합니다.

특정 정보를 비즈니스 논리 계층으로 전달해야 하는 경우 관련 메서드에 인수로 전달합니다.비즈니스 로직 계층에서 다음과 같은 액세스를 허용하지 마십시오.HttpContext또는Application["Settings"]그것은 격리와 분리의 원칙을 위반하기 때문입니다.

업데이트: 의 소개로 인해async/await이러한 문제가 발생하는 경우가 더 많기 때문에 다음 팁을 고려할 수 있습니다.

일반적으로 전화만 해야 합니다.HttpContext.Current몇 가지 시나리오에서만 가능합니다(예: HTTP 모듈 내).다른 모든 경우에는 다음을 사용해야 합니다.

대신에HttpContext.Current.

통합 모드가 있는 IIS7에서는Current에서 사용할 수 없습니다.Application_Start여기 비슷한 실이 있습니다.

실행하려고 노력합니다.Application_AuthenticateRequest대신에Application_Start.

이 메서드에는 다음과 같은 예가 있습니다.HttpContext.Current,와는 달리Application_Start(애플리케이션 라이프사이클에서 매우 빨리 실행되며, 이는 곧 실행되어 데이터를 보유하지 못할 정도로 빠릅니다.HttpContext.Current반대합니다.

도움이 되길 바랍니다.

WCF 서비스인 경우 web.config에 다음을 추가할 수 있습니다.

<configuration>
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    </system.serviceModel>
</configuration>

현재 응용 프로그램에 대해 ASP.NET 호환성 모드가 설정되었는지 여부를 나타내는 부울 값입니다.기본값은false.

이 속성이 다음으로 설정된 경우trueWCF(Windows Communication Foundation) 서비스에 대한 요청은 ASP.NET HTTP 파이프라인을 통해 전송되며 비 HTTP 프로토콜을 통한 통신은 금지됩니다.

asp.net 웹 양식 응용 프로그램을 사용하는 경우 web.config에 이 행을 추가하면 다음과 같은 작업이 수행될 수 있습니다.

  <appSettings>
   <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
</appSettings>

언급URL : https://stackoverflow.com/questions/19509672/why-is-httpcontext-current-null

반응형