netMsmqBinding (MSMQ3) を介した WCF サービスがあります。サービスの一部の操作にはトランザクション機能がなく、ロールバックできないため、サービス コードは WCF トランザクション制御の下で実行されません。私が理解しているように、これは、有害なメッセージ処理などの利点が得られないことを意味します。したがって、サービスコードが呼び出されると、メッセージは永遠にキューから外れます。
サービスに重大な障害が発生した場合に、それ以上メッセージが失われるのを防ぎたいと考えています。そのため、失敗したばかりのメッセージをログに記録し、単純な例外 (FaultException ではない) を発生させます。他のすべての WCF サービス バインディングと同様に、チャネル (この場合は MSMQ チャネル ディスパッチャ) に障害が発生し、キューからそれ以上メッセージを受信しないことが予想されます。
しかし、私はこの動作(しゃれなし)を機能させることができないようです。サービス コードが例外をスローするかどうかに関係なく、サービスにルーティングされるメッセージを取得し続けます。
ここで何か不足していますか?リクエストごとに新しいチャネルが作成されるという点で、netMsmqBinding は http バインディングのように動作しますか? もしそうなら、私の問題を解決する方法についてのアイデアをいただければ幸いです。