2011-07-27 19 views
5

Phương thức OnTransactionCommit của tôi không được gọi trên IIS 7 khi tôi sử dụng Response.Redirect hoặc Response.End. Mã dưới đây hoạt động như mong đợi trên IIS 6 ("Comitting ..." là đầu ra sau "OK") nhưng trên IIS 7 tôi chỉ nhận được "OK" trừ khi tôi loại bỏ Response.End. Phương thức OnTransactionAbort được gọi trên cả hai phiên bản của IIS nếu tôi thay thế Response.End bằng Err.Raise.Response.Redirect/End không giao dịch trong ASP cổ điển trên IIS7

Tôi đã thử thay đổi đường dẫn thành Cổ điển nhưng điều đó không có hiệu lực. Bất cứ ai có thể làm sáng tỏ những gì tôi cần phải thay đổi để có được phương pháp này để thực hiện?

<%@ 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

Đảm bảo thành phần MTS ("Microsoft Transaction Server") được cài đặt, tôi tin rằng nó không còn được cài đặt theo mặc định trong Windows Server 2008 –

+0

@Sean là chính xác, tuy nhiên nó có thể được cài đặt nhưng không chạy. Kiểm tra bảng điều khiển dịch vụ. [chi tiết hơn] (http://www.asp101.com/articles/chris/asptransactions/default.asp) Điều này nói rằng, từ những gì tôi đã thấy tất cả điều này là một phần của IIS 6 vì vậy có cơ hội tốt nó đã được "bán phá giá "trong IIS 7 trở lên. –

+0

MTS hiện là một phần của COM +. Tôi khá tự tin rằng nó được cài đặt và chạy một cách chính xác. 'ObjectContext.SetAbort' hoạt động như mong đợi khi tôi loại bỏ câu lệnh' Response.End' nhưng trên IIS 6 nó hoạt động ngay cả khi tôi kết thúc phản hồi. –

Trả lời

1

Calling Response.End hoặc Response.Redirect lẽ ném một ThreadAbortedException, như gọi nó trong .NET không (IIS7 và .NET được tích hợp chặt chẽ).

+0

Tôi đồng ý rằng có lẽ điều gì đang xảy ra, nhưng giao dịch vẫn nên bị huỷ bỏ hoặc cam kết như trên IIS 6. –

0

Lưu ý rằng thuộc tính nội tại IIS bị tắt theo mặc định trên Windows 2008 và các phiên bản mới hơn. Hãy xem this link và đến this support page từ microsoft.

Các vấn đề liên quan