MSMQを使用してbyte
アレイを転送しています。msmqはトランザクションキューのデータの整合性を保証しますか?
フォーマッタはBinaryMessageFormatter
です。
宛先キューはプライベートキューであり、私は直接TCP通信を使用しています。
宛先マシンが異なるLANにあり、その外部IPアドレスでアクセスします。
着信TCP通信を実際の宛先マシン(ポート転送)にルーティングするファイアウォールがあります。
だから、システムのアーキテクチャは、次のようになります。
[source machine] --> [destination firewall] --> [destination machine]
私は数ヶ月のためのシステムを使用してきた、そしてすべてはうまく行きました。
最近、ファイアウォールの障害が発生しました。
どうやら、これはデータが破損する原因:成功した先のマシンに配信された、MSMQによると、
キューがトランザクションですが、メッセージ、メッセージの内容が壊れていました。ある
、キューからメッセージを読み取るためのコードが例外を提起:
try
{
var message = queue.Receive(readTimeout, transaction);
if (message != null)
{
data = (byte[]) message.Body; // this line raises an exception
return true;
}
}
catch (Exception e)
{
Logger.Error("error reading queue", e);
}
私はキュー(トップの)からいくつかのメッセージを削除しなければならなかったし、システムが正常に戻ってました。
私の質問:
それがこれを引き起こしただけで、ファイアウォールの失敗だったと仮定すると、トランザクションキュー、どのようにメッセージが配信されると考えられていた来て知っていますか?
MSMQはトランザクションキューのデータの整合性を保証するために何らかのチェックサムを実行していませんか?
書き込み先のMSMQ Qはどこですか? –
@Arnonは、前述のように、別のマシンの別のLANにあるキューに書き込んでいます。 –
キューに書き込むためのコードは何ですか? –