異なるサブシステム間の統合アーキテクチャをモデル化しました。サブシステムからのすべての通知は、プリミティブ を使用してサブスクライブされたサブシステムに送信されますPublish。これらの通知はメソッドfor内のループで送信されるHandlerため、すべて同じTransactionScope. これを説明するために簡単な例を示しました。クライアントは、プリミティブを使用して可変数のメッセージを送信するサーバーにメッセージを送信しますPublish。これはサーバー ハンドラです。
public void Handle(MyMessage message)
{
for (int i = 0; i < message.numberOfNotifications; i++)
{
Bus.Publish<NotificationMessage>(m =>
{
m.myPersonalCount= i;
}
);
}
}
私が探していて理解できないのは、i30 以下に設定するとすべて問題ないということです。31 以上から、次のエラー メッセージが表示されます。
could not execute query
[ SELECT this_.SubscriberEndpoint as y0_ FROM "Subscription" this_ WHERE this_.MessageType in (?) ]
そして、私が得る内部例外を見るとUnable to enlist in a distributed transaction.
プリミティブを使用して同じことを試みましたSendが、すべて (10k メッセージで試行) であったため、これはPublishディレクティブのみに関連する問題です。
dbms には Oracle 10g を、クライアントには Oracle 11g を使用しています。
エンドポイントがトランザクション対応でない場合、問題はないので、問題は TransactionScope のみに関係しているようです。
どんな助けでも大歓迎です、ありがとう