Moja metoda OnTransactionCommit nie jest wywoływana w usługach IIS 7, gdy używam Response.Redirect lub Response.End. Poniższy kod działa zgodnie z oczekiwaniami w usługach IIS 6 („Postępowanie...” jest wyświetlane po „OK”), ale w usługach IIS 7 otrzymuję tylko „OK”, chyba że usunę Response.End. Metoda OnTransactionAbort jest wywoływana w obu wersjach IIS, jeśli zastąpię Response.End Err.Raise.
Próbowałem zmienić potok na klasyczny, ale to nie przyniosło efektu. Czy ktoś może rzucić jakieś światło na to, jakie ustawienie muszę zmienić, aby ta metoda została wykonana?
<%@ 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 odpowiedzi
Wywołanie Response.End
lub Response.Redirect
prawdopodobnie wyrzuci ThreadAbortedException
, tak jak wywołanie go w .NET
(IIS7 i .NET są ściśle zintegrowane).
Należy zauważyć, że wewnętrzne właściwości usług IIS są domyślnie wyłączone w systemie Windows 2008 i nowszych wersjach. Spójrz na ten link oraz tę stronę pomocy technicznej firmy Microsoft.
Podobne pytania
Nowe pytania
iis-7
IIS (Internetowe usługi informacyjne) w wersji 7 - to aplikacja serwera WWW i zestaw modułów rozszerzeń funkcji stworzonych przez firmę Microsoft do użytku z systemem Microsoft Windows. Wydany z Windows Server 2008 i Windows Vista.
ObjectContext.SetAbort
działa zgodnie z oczekiwaniami po usunięciu instrukcjiResponse.End
, ale w IIS 6 działa nawet po zakończeniu odpowiedzi.