2011-07-27 13 views
5

Response.RedirectまたはResponse.Endを使用すると、IIS 7でMy OnTransactionCommitメソッドが呼び出されません。以下のコードは、IIS 6( "Comitting ..."は "OK"の後に出力されます)で期待どおりに動作しますが、IIS 7ではResponse.Endを削除しない限り、 "OK"しか表示されません。 OnTransactionAbortメソッドは、Response.EndをErr.Raiseに置き換えると、IISの両方のバージョンで呼び出されます。Response.Redirect/Endは、IIS7のClassic ASPでトランザクションをコミットしません。

パイプラインをClassicに変更しようとしましたが、効果がありませんでした。誰かがこのメソッドを実行するために変更する必要がある設定について、どのような光を当てることができますか?

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

IISの組み込みプロパティは、Windows 2008以降のバージョンではデフォルトで無効になっています。 マイクロソフトからthis link およびthis support pageをご覧ください。

関連する問題