2011-02-06 7 views
2

トランザクション内のMSMQからメッセージを取得しています。アプリケーションが何らかの理由でそれらを処理できない場合、アプリケーションはトランザクションを中止します。MSMQメッセージのAbortCountを取得するにはどうすればよいですか?

トランザクションが中止されると、メッセージはキューに戻されます。メッセージが再度取り出された場合、メッセージが以前に中止されたかどうかを知る方法はありますか?

MMC(MSMQ UI)を使用すると、メッセージのプロパティを表示して、メッセージのアボート回数を確認できます。

プログラムでこの値を取得する方法はありますか? MSDNサイトから

答えて

1

:読み取り メッセージが試みられた回数を追跡するために

、Windowsの Vistaは の数中止され、移動カウントをカウント耐久性のあるメッセージ プロパティを維持しますプロパティ は、メッセージ がアプリケーションキュー とサブキューの間を移動する回数を数えます。 WCFチャネルは、 これらを使用して、受信再試行 カウントと再試行サイクル数を計算します。 Windows Server 2003およびWindows XPの場合、 アボートカウントは、WCFチャネルによって メモリに保持され、アプリケーションが失敗した場合は にリセットされます。また、 WCFチャネルでは、いつでもメモリ内の最大256個のメッセージについて、アボートカウント を に保持できます。 257番目のメッセージが読み取られた場合は、 、最も古いメッセージのアボートカウント がリセットされます。

アボートカウントおよび移動カウント プロパティは、 操作コンテキストを使用して、サービス操作の プロパティで利用できます。以下のコード の例は、それらにアクセスする方法を示しています。

例のページはhereです。

+0

これはWCFによって取得されます。 WCFを使用しないときにAbortCountを取得する方法はありますか? – legion

+0

私は気づいていません。 WCFを使用しない場合の従来の知恵は、メッセージのアボートカウントでユーザー定義フィールドをインクリメントし、それを再キューに入れることです。ロールバックすれば、それを変更することはできません。ただし、更新されたメッセージと元のメッセージを同じ作業単位に入れて、メッセージを失うことがないようにすることができます。 –

関連する問題