다른 스레드에서 HttpContext.Current에 액세스
SiteCrawler.cs라는 클래스에서 일부 메서드를 실행하는 약 25 개의 서로 다른 스레드를 시작하는 C # ASP.NET 응용 프로그램이 있습니다.
에서 HttpContext.Current.Session
나는 사용자가 만든 검색 결과를 저장하고 모든 스레드가 완료 실행하는 경우 사용자에게 제시합니다. 내 문제는 HttpContext.Current
개체가 존재하지 않기 때문에 생성 된 스레드에서 null이라는 것입니다.
응용 프로그램이 다중 스레드 일 때 제한 사항으로 인해 세션을 사용하지 않고 사용자 / 세션 별 데이터를 저장하려면 어떤 다른 옵션이 있습니까?
나는 해결책을 찾기 위해 Stackoverflow의 모든 인치를 검색하려고했지만 운이 없었습니다 ....
내 응용 프로그램에는 사용하는 코드가 많이 있으며 해당 코드를 HttpContext.Current
수정할 수 없습니다.
worker.DoWork()
아래 샘플에서 해당 코드를 사용합니다. 그리고 별도의 스레드에서 실행해야했습니다.
다음 해결책에 도달했습니다.
HttpContext ctx = HttpContext.Current;
Thread t = new Thread(new ThreadStart(() =>
{
HttpContext.Current = ctx;
worker.DoWork();
}));
t.Start();
// [... do other job ...]
t.Join();
Fritz Onion : Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code 의이 기사를 살펴보십시오 . 꽤 길지만 요구 사항은 너무 사소하지 않습니다.
또한 K. Scott Allen은 바로이 문제에 대한 짧은 기사 인 Working With HttpContext.Current를 게시했습니다.
@Rory는 HttpContext
스레드에 전달하더라도 의 특정 객체 가 null이 된다는 주석을 작성했습니다 . 이것은 User
재산 과 함께 나에게 일어났습니다 . 따라서 대신 다음과 같이 사용자를 스레드 CurrentPrincipal에 복사 할 수 있습니다.
컨트롤러 컨텍스트에서 사용자를 저장하십시오.
_user = HttpContext.Current.User;
var processThread = new Thread(() => ThreadedCode());
processThread.Start();
스레드에서 'Thread 's'사용자를 설정합니다.
private static void ThreadedCode()
{
// Workaround for HttpContext.Current.User being null.
// Needed for CreatedBy and RevisedBy.
Thread.CurrentPrincipal = _user;
HttpContext는 요청의 수명 동안 만 사용할 수 있습니다. 스레드는 잠재적으로 요청보다 훨씬 오래 지속될 것입니다. 이것이 아마도 처음에 스레드가 필요한 이유 일 것입니다! :)
SiteCrawler.cs 클래스의 생성자에 HttpContext.Current를 추가하기 만하면됩니다.
public class SiteCrawler
{
HttpContext context = HttpContext.Current;
public void Method()
{
context.WhateverYouWant
}
}
데이터베이스에 저장 한 다음 사용자의 브라우저가 계속 새로 고치거나 ajax를 사용하거나 새 시그널 러를 사용하여 결과가 이미 db에 기록되었는지 확인할 수 있습니다. 도움이되기를 바랍니다.
참조 URL : https://stackoverflow.com/questions/8925227/access-httpcontext-current-from-different-threads
'IT이야기' 카테고리의 다른 글
Bash의 Vi 명령 줄 편집에서 명령 모드와 삽입 모드를 구별하는 방법 (0) | 2021.04.06 |
---|---|
foreman은 "started with pid #"줄만 표시하고 다른 것은 표시하지 않습니다. (0) | 2021.04.06 |
r 및 rb 모드에서 텍스트 파일 구문 분석의 차이점 (0) | 2021.04.05 |
std :: to_string-오버로드 된 함수의 인스턴스가 인수 목록과 일치합니다. (0) | 2021.04.05 |
문자열이 변경되지 않도록 보장되는 경우 문화에 따라 문자열 비교가 실제로 다를 수 있을까? (0) | 2021.04.05 |