2

同じドメイン内の 2 台の別々のマシンにある 2 つのサービス間の msmq 通信をセットアップしようとしています。

マシンは 1 次 - 2 次の状況です。

プライマリから送信およびパージし、セカンダリから受信できるようにする必要があります

これを可能にするセットアップが見つからないようです。キューがセカンダリに存在し、プライマリが送信でき、セカンダリが受信できるセットアップが1つありましたが、必要に応じてプライマリからパージできませんでした。これは、キューがプライベートでリモートであるためだと思います。

そこで、状況をひっくり返してみました。キューをプライマリに配置しましたが、プライベート ローカル キューに送信できなかったため、それらをパブリックにしましたが、セカンダリでリモート パブリック キューを見つけることができません。

if (!MessageQueue.Exists(queueName))
 {
      //log they don't exist and exit
      throw new Exception("One or more of the required queues do not exist");
 }

syncQ = new MessageQueue(queueName){Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};

if (machineState == MachineState.Primary)
{
     syncQ.SetPermissions(ASPConfiguration.SyncUser, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);

     syncQ.Purge();
}

プライマリ = ".\nw"

セカンダリ = "FormatName:Direct=OS:CACTEST-WS-D\nw"

必要なことを実行できる限り、キューがプライベートかパブリックかは問題ではありません。

助けてくれてありがとう。

4

1 に答える 1

2

あなたの質問に答えて:

キューがセカンダリに存在し、プライマリが送信でき、セカンダリが受信できるセットアップが1つありましたが、必要に応じてプライマリからパージできませんでした。

セカンダリとプライマリのキューがセカンダリに送信されるという初期設定は、正しい構成です。プライマリからセカンダリキューを削除できない理由がわからない。これはおそらく、キューのアクセス許可の単純なケースです。プライマリで実行されているサービスアカウントにフルコントロールを付与してみてください。

それで私は状況を変えようとしました。キューをプライマリに配置しましたが、プライベートローカルキューに送信できませんでした

繰り返しますが、これがなぜなのかわかりません。どのようなエラーが発生しますか?MSMQトレースを有効にすると、両方のマシンで送信エラーが発生します。とにかく、これは正しい構成ではありません。リモートで送信するのが常に最善です-ローカルを受信します。

プライマリ="。\nw"

対処の問題を回避するために、すべての状況で完全にフォーマットされたmsmqアドレスを使用することをお勧めします。

キューが私にとってプライベートであるかパブリックであるかは実際には問題ではありません

まあ、それは本当に重要です。パブリックキューは、大量のクラスタリングやルーティングが必要なエンタープライズ規模の構成用であり、いずれにせよ、それらを機能させるにはActiveDirectoryに登録する必要があります。場所から場所へと物を送りたいだけなら、常にプライベートキューを使用してください。

私のアドバイスは、初期設定に戻り、リモートパージを機能させることに集中することです。

于 2012-10-16T07:39:50.353 に答える