2

チームの新しいプロジェクトで MSMQ の使用を調査していますが、MSMQ メッセージを送信して System.Transactions.TransactionScope 内で SQL コマンドを実行し、それらを一緒にコミットまたはロールバックできるかどうかを知る必要があります。コード例で「はい」と言う信頼できる情報源をオンラインで見つけることができません。

いくつかのメッセージを 1 つのキューに送信し、いくつかのレコードを 1 つのデータベースに挿入する必要がありますが、同時に成功または失敗する必要があります。

編集: テストでこれが機能するかどうかを実際に確認することはできませんでした (私はこのタスクをすぐにやめました) が、すべてのドキュメントには、TransactionScope が MSMQ メッセージと SQL コマンドを同じインスタンスでキャプチャすることが記載されています。

4

1 に答える 1

3

個人的な経験から、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 コードを挿入するだけで問題ありませんか?

于 2008-10-30T17:54:47.830 に答える