MQキューからメッセージを読み取り、別のキューに書き込むvb.netコードがあります。MQを持つTransactionScope - 読み取りと書き込みメッセージ
これはトランザクション(using New TransactionScope()
)でこれを行います。したがって、書き込みが失敗した場合、読み取りはロールバックされます。
問題は、.Netプログラムを閉じるとトランザクションがコミットするように見えることです。
MQエクスプローラを使用すると、メッセージの移動が確認され、.netプログラムが終了するまで(メッセージは新しいキューに残っています)、キューステータスに "Uncommitted Messages: Yes
"と表示されます。別のプログラム(IIB)によってキューから削除されます。
したがって、TransactionScope
は処分されていないようです。なぜ私は考えられないのですか?私はMQエクスプローラーで何を参照してください。ここ
' MQMessageDetails is just a data-storage class for message data
Friend Function MoveMessages(messages as IEnumerable(of MQMessageDetails))
For Each msg in messages
Try
Using ts As New TransactionScope()
success = WriteMessage(msg, "Q.OUT")
success = success and ReadMessage(msg)
If success Then
ts.Complete()
End If
End Using
Catch ....
End Try
Next
End Function
とです::
WPFは、ボタンが押されたコマンドを呼び出すには、次の方法(簡易)を呼び出します。
ここに関連するコードです
**Before program start**
Q.IN - depth 2, no uncommitted messages
Q.OUT - depth 0, no uncommitted messages
**Move button clicked**
Q.IN - depth 1, 1 uncommitted message
Q.OUT - depth 1, 1 uncommitted message
**Program closed**
Q.IN - depth 1, no uncommitted messages
Q.OUT - depth 0, no uncommitted messages <- the message was read by another program
成功したら...句でmq commitを発行しようとしましたか? – IanB
いいえ、トランザクションスコープを使用しているので、私はそれをしなければならないと思いませんでした(自動で処理する必要がありますか?) – simonalexander2005
どのMQクライアントのバージョンを使用していますか? – Shashi