2011-07-27 1 views
5

Response.Redirect 또는 Response.End를 사용할 때 내 OnTransactionCommit 메서드가 IIS 7에서 호출되지 않습니다. 아래의 코드는 IIS 6 ("Comitting ..."이 "OK"다음에 출력 됨)에서 예상대로 작동하지만 IIS 7에서는 Response.End를 제거하지 않는 한 "OK"만 나타납니다. OnTransactionAbort 메서드는 Response.End를 Err.Raise로 바꿀 경우 두 버전의 IIS에서 모두 호출됩니다.Response.Redirect/End가 IIS7의 클래식 ASP에서 트랜잭션을 커밋하지 않습니다.

파이프 라인을 클래식으로 변경하려고 시도했지만 효과가 없습니다. 누구든지이 메서드를 실행하기 위해 어떤 설정을 변경해야하는지 알 수 있습니까?

<%@ Transaction="Supported" Language="VBScript" %> 
<% Option Explicit %> 
<% 
'Called by context unless transaction is aborted 
Sub OnTransactionCommit() 
    Response.Write("Commiting...") 
    Response.Flush 
End Sub 

'Called by context when transaction is aborted 
Sub OnTransactionAbort() 
    Response.Write("Aborting...") 
    Response.Flush 
End Sub 

Response.Write("OK<br/>") 
Response.Flush 
Response.End 
'Err.Raise 1, "test" 
%> 
+2

MTS ("Microsoft Transaction Server") 구성 요소가 설치되어 있는지 확인하십시오. 더 이상 Windows Server 2008에 기본 설치되어 있지 않습니다. –

+0

@Sean은 정확하지만 설치되어 있지만 실행되지는 않을 수 있습니다. 서비스 제어판을 확인하십시오. [자세한 내용] (http://www.asp101.com/articles/chris/asptransactions/default.asp)이 모든 것이 IIS 6의 일부라고 보았으므로 "버려졌습니다"라는 좋은 기회가 있습니다. "IIS 7 이상에서. –

+0

MTS는 이제 COM +의 일부입니다. 나는 그것이 올바르게 설치되어 제대로 실행되고 있다고 확신합니다. 'ObjectContext.SetAbort'는'Response.End' 문을 제거 할 때 예상대로 작동하지만 IIS 6에서는 응답을 끝내더라도 작동합니다. –

답변

1

.NET에 전화로 (IIS7 및 .NET이 긴밀하게 통합되어있다) 않는, Response.End 또는 Response.Redirect 아마 ThreadAbortedException을 던졌습니다 호출.

+0

아마도 그 일이 일어난 것 같지만 IIS 6에서와 같이 트랜잭션이 여전히 중단되거나 커밋되어야합니다. –

0

Windows 내장 버전은 Windows 2008 이상 버전에서는 기본적으로 비활성화되어 있습니다. microsoft에서 this linkthis support page을 살펴보십시오.

관련 문제