TransactionScopeでSQLコマンドを実行してMSMQメッセージを送信することは可能ですか?
-
05-07-2019 - |
質問
チームの新しいプロジェクトでMSMQを使用して調査していますが、MSMQメッセージを送信し、System.Transactions.TransactionScope内でSQLコマンドを実行して、それらを一緒にコミットまたはロールバックできるかどうかを知る必要があります。 「はい」という信頼できるソースがオンラインで見つかりません。コード例付き。
いくつかのメッセージを単一のキューに送信し、いくつかのレコードを単一のデータベースに挿入する必要がありますが、一緒に成功または失敗する必要があります。
編集:テストでこれが機能するかどうかを実際に確認することはできませんでした(このタスクをすぐに中止しました)が、すべてのドキュメントには、TransactionScopeが同じインスタンスでMSMQメッセージとSQLコマンドをキャプチャすることが記載されています。
解決
個人的な経験から、TransactionScopeはSQLでうまく機能することがわかっています。私はMSMQにあまり慣れていませんが、簡単な Google検索にいくつかの例を示しています(通常はフォーラムディスカッション)、正常に機能しているように見えます。 System.Messaging.MessageQueueオブジェクトには.Transactionalプロパティもあり、.Send()メソッドにはMessageQueueTransactionパラメーターがあるため、すべて一緒に動作するはずです。
これは、検索中のフォーラムの1つからのコード例です(私のコードではありません):
using (TransactionScope scope = new TransactionScope())
{
using (MessageQueue myQueue = new MessageQueue(QUEUE_NAME))
{
if (myQueue.Transactional)
{
myQueue.Send(TicketTextBox.Text, "Message", MessageQueueTransactionType.Automatic);
}
}
scope.Complete();
}
TransactionScopeのusing()ブロック内(.Complete()の前)でSQLコードをスローするだけで、準備はいいですか?