特定のエンドポイントに、SQL Azure データベースに対して作業を行うメッセージ ハンドラーがいくつかあります (現時点では、まだローカルの SQL 2012 インスタンスを使用しています)。X と Y という 2 つのイベントを発行するコマンド ハンドラーがあります。同じエンドポイントに、X へのサブスクライバーと Y へのサブスクライバーがあります。これらのサブスクライバーは両方とも、内部で同じデータ アクセス コンポーネントを使用しており、それを Z と呼びます。依存関係インジェクションは、共有ではなく、呼び出しごとに設定されます。
コンポーネント Z は、カーテンの下で Entity Framework 6 を使用しています。私が抱えている問題は、データベースを開くだけで SqlException がスローされ、MSDTC エスカレーションについて不平を言うことです。
ハンドラーを TransactionScope.Suppress で一時的にラップしたところ、エラーが停止しましたが、もっと基本的なものが欠けていると思います。
エンドポイントを非トランザクションに設定するのは簡単ですか? トランスポート メカニズムとして Azure Service Bus を使用するように構成したので、これはうまくいくと思っていたでしょう。これを行うと、メッセージ ハンドラ内で例外がスローされた場合でも、NServiceBus は再試行しますか? (SLRの制限まで-質問の一部ではありません。冪等性の問題も理解しています)。