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 모듈 내).다른 모든 경우에는 다음을 사용해야 합니다.
Page.Contexthttps://learn.microsoft.com/en-us/dotnet/api/system.web.ui.page.context?view=netframework-4.7.2Controller.HttpContexthttps://learn.microsoft.com/en-us/dotnet/api/system.web.mvc.controller.httpcontext?view=aspnet-mvc-5.2
대신에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
'programing' 카테고리의 다른 글
| 특정 NA 열이 포함된 행 생략 (0) | 2023.06.26 |
|---|---|
| Angular 2에서 JSON을 게시하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
| "쿼리 내에서 DML 작업을 수행할 수 없음"에 대한 솔루션? (0) | 2023.06.26 |
| 참조된 테이블에 외부 키의 참조 열 목록과 일치하는 기본 키 또는 후보 키가 없습니다. (0) | 2023.06.26 |
| Git: 리포지토리에서 파일을 삭제하지 않고 인덱스에서 파일을 제거하는 방법 (0) | 2023.06.26 |