httpcontext 속성이 null을 반환 할 때 어떻게 검색합니까?
-
22-08-2019 - |
문제
나는 별도의 스레드에서 비동기 작업을하고 있습니다.
ThreadPool.QueueUserWorkItem()
그리고이 별도의 스레드에서는 HttpContext.Current
액세스 할 수 있도록 :
HttpContext.Current.Cache
HttpContext.Current.Server
HttpContext.Current.Request
하지만, HttpContext.Current
이 별도의 스레드를 만들 때 null입니다.
의문
새 스레드를 어떻게 만들 수 있습니까? HttpContext.Current
NULL이 아닌가? 아니면 캐시, 서버 및 요청 객체에 액세스 할 수있는 다른 방법이 있습니까?
해결책
HTTPContext와 같은 ASP.NET 스택에 의존하는 객체에 대한 참조를 사용하지 않으려 고 노력합니다. 다른 스레드에서 작업을 수행 해야하는 경우 작업이 완료 될 때까지 ASP.NET에서 기다리고 싶지 않기 때문입니다. 그리고 스레드가 아닌 동안 요청/컨텍스트/세션이 종료 될 수 있습니다.
스레드에 필요한 데이터가있는 객체를 전달해야합니다.
다른 팁
ASP.NET 캐시에 액세스 할 수 있습니다 httpruntime.cache HTTPContext가 없지만 불행히도 서버 나 요청에 액세스 할 수 없습니다.
당신이 그것에 대해 생각한다면, 이것은 의미가 있습니다 - 당신은 어떤 페이지에도 서비스를 제공하지 않으므로 요청이 없습니다.
1- 하단 코드를 추가하십시오 <system.serviceModel>
web.config 파일에서 :
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
2- 웹 서비스 파일에서 네임 스페이스 후 하단 코드 추가 :
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
3- 웹 파트 프로젝트 재건. 완료!
httpcontext.server 서비스의 경우 httpserverutility 클래스를 사용할 수 있습니다. 캐시의 경우 위에서 언급 한 것처럼 httpruntime.cache를 사용할 수 있습니다. 요청 객체의 경우 요청에서 스레드로 데이터를 전달할 수 있습니다. request.querystring 또는 request.form ... 또는 무엇이든 같은 것들.
스레드 풀 구현이 있습니다 여기 이는 호출 스레드의 HTTP 컨텍스트의 전파를 제공합니다. 나는 아직 그것을 사용하지 않았지만 계획을 세우고 있습니다.
별도의 스레드가 해당 객체에 액세스하려고한다면 그렇습니다. 그 객체는 스레드 레벨에서 스코핑됩니다. 새 스레드에서 사용하려면 필요한 방법/클래스로 전달해야합니다.
일반적으로 ASP.NET은 새 스레드를 생성 할 수 없습니다 ... 여기에 게시하다 주제에.
여기에 좋은 글이 있습니다 MSDN에서 ASP.NET의 스레딩.