2010-12-17 1 views
2

현재 Visual Studio 디버깅 웹 서버 인 Cassini 내부의 .NET 4.0 (Windows 7)에서 실행중인 ASP.NET MVC 2 응용 프로그램을 디버깅하고 있습니다.다른 스레드에서 BeginRequest 및 EndRequest를 실행하는 Cassini (VS WebDev)

내 Application.EndRequest 처리기에서 갑자기 예외가 발생하여 모두 제대로 실행되고있었습니다. 이 문제를 조사한 결과, Cassini가 BeginRequest와 다른 스레드에서 EndRequest를 호출한다는 이유가 발견되었습니다 (BeginRequest에서 설정되고 EndRequest 핸들러에서 사용 된 ThreadStatic 변수가 null이었습니다.이 스레드에서는 BeginRequest가 결코 없었기 때문입니다). 라는).

다른 스레드에서 Cassini가 BeginRequest 및 EndRequest를 실행하는 이유는 무엇일까요?

이유는 '비동기'페이지 지시문 (Do ASP.NET Requests always BeginRequest and EndRequest on the same thread?을 참조하십시오. 그러나 내 Page 지시문에 '비동기'속성이 없음)가있을 수 있습니다.

또 다른 원인이 있어야합니다.

감사합니다.

답변

5

ASP.NET은 일반적으로 thread-agile입니다. 하나의 스레드에서 전체 요청을 처리한다고 가정하면 안됩니다. 스레드 고정 변수 대신 HTTP 컨텍스트를 사용하십시오.

요청 처리 중에 스레드가 전환 할 수있는 특정 위치 만 있지만 IMO를 가정하지 않는 것이 좋습니다.