문제

나는 사용 중입니다 Server.Transfer. 모든 것이 잘 작동하지만 예외 로그는 예외에 따라 표시됩니다.

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)

위의 예외를 피하려는 아이디어.

도움이 되었습니까?

해결책

이 예외는 전화로 던져집니다 Server.Transfer 현재 방법의 실행을 중단하려면 - 정확히 같은 일이 발생하면 Response.Redirect.

당신이 가진 두 가지 선택은 다음과 같습니다.

  • ThreadabortException / Reperform을 잡아서 재검토하십시오Server.Transfer
  • 당신만이하는지 확인하십시오 Server.Transfer 잡히지 않는 곳에서 (권장)

편집하다: 그것을 긁어 http://support.microsoft.com/kb/312629 시도해 볼 몇 가지 다른 제안이 있지만 여전히 위의 #2를 추천합니다.

다른 팁

이것을 해결하는 또 다른 방법은 생성 된 오류를 포착하고 그것을 재검사하지 않는 것입니다.

        catch (ThreadAbortException)
        { 
        }

Caling Server.Transfer는 항상 ThreadAbortException을 던지는 Response.end를 호출합니다. 캐치 블록에 잡힐 수 있지만 항상 캐치 블록의 끝에 다시 던져지기 때문에 "특별한"예외입니다. 오류 로깅이 ThreadabortExceptions를 무시하게됩니다.

이 문제는 응답 및 Server.Transfer 메소드에서 발생합니다.

이 문제에 대한 해결책은 다음과 같습니다.

Server.Transfer의 경우 Server.Execute 메소드를 대신 사용하십시오.

다운로드 샘플 예제는이 링크를 방문하십시오. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

다음으로 응답을 대체하면 다음과 같은 문제를 해결하는 데 도움이되었습니다.

응답 .Flush (); 응답 .close ();

나타내다 응답 대신 response.flush ()를 사용할 수 있습니까? end ()

바꾸다 Response.End() 와 함께 HttpContext.Current.ApplicationInstance.CompleteRequest();

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top