1

MSMQ を使用して別のマシン上のサービスに送信するように設定された WCF サービスがあります。クライアントを別のマシンに移動しようとしていますが、うまくいきません。MSMQ.End2End イベント ログを有効にすると、

Message with ID {6940f8fa-3d31-4db0-ae2b-59bc98c99f2c}\25321 was sent to queue DIRECT=OS:iisapp1-vvpm\private$\TransactionalEmailService/TransactionalEmail.Service.TransactionalEmailService.svc

これは、私たちのマシンからは正しく機能していると思わせますが、ターゲット マシンではその痕跡を見つけることができません。サービスは呼び出されておらず、配信不能キュー (または、他に考えられる場所) にメッセージが見つかりません。

また、自分のマシンで Visual Studio からコードを直接実行すると、コードが機能します。

受信キューを DEV マシンに変更すると、コードも機能するようになります。これは、受信側のマシンに問題があるとさらに考えさせられます。(何のことかさっぱりわかりません)

更新 1: 戻ってきて、送信しようとしたすべてのメッセージがトランザクションの配信不能キューにあることに気付きました。エラー メッセージは「キューに到達するまでの時間が経過しました」です。接続状態を見ると、非アクティブであり、別のメッセージを送信しても接続されることはありません。マシンを再起動すると、再び「接続済み」になります。メッセージをもう一度送信して、キューの状態を確認します。12 のメッセージがあり、そのすべてが未確認です (0 は未処理です)。

4

4 に答える 4

1

そのため、エンドポイント マシンが再起動されると、再び発生し始めました。この記事に出くわしました。これが本当の解決策でした。

http://blogs.msdn.com/b/johnbreakwell/archive/2007/02/06/msmq-prefers-to-be-unique.aspx

(リンクが消えた場合: )

メッセージの一部として送信される MSMQ に ID があるようです。リモート ホストは、その ID をキャッシュへのキーとして使用して、ack を返信する相手を決定します。マシンのクローンを作成すると、その ID のレジストリで同じ値が取得されるため、他のマシンは誰に送り返せばよいかわかりません。そのため、それは間違ったマシンに送信され、そのマシンはそれを破棄し、他のマシンは送信しようとしている大量のメッセージでスタックします。これは、ある日だけ機能し始めた理由も説明しています...キャッシュが期限切れになり、「正しい」マシンがエンドポイントとして配置されました。

複製されたマシンに MSMQ を再インストールすると、問題が修正されます。

于 2013-01-15T21:09:11.117 に答える
0

ここで何を言うべきかわかりませんが、現在は機能しています。いくつかのものを読んだことで、キューのステータスを知ることができました([機能] / [メッセージキュー]の下の[送信キュー]をクリックします)。そこから、修正プログラムを含むこのKB記事を見つけました。http://support.microsoft.com/kb/976438該当するようには見えませんでしたが、人々が抱えていた症状はすべて同じでした。私たちの人たちはそれをインストールしようとしましたが、失敗し、再起動しませんでした...しかし、何らかの理由でメッセージキューが機能し始めました。

誰かが何らかの洞察を持って来たら、私は喜んで彼らに賛成するか、彼らに報奨金を与えます(それがすぐに十分である場合)。しかし、私は今のところこれを答えとして受け入れます。

于 2012-11-30T21:53:59.157 に答える
0

ここでこれが当てはまるかどうかはわかりませんが(MSMQのコンテキストでWCFを使用した経験はありません)、あなたが話しているこの種の動作のより一般的な理由の1つは、義務がないことですMessageQueue コンストラクター (「FormatName:DIRECT=...」など) を使用するとき、または何らかの形で名前を間違って取得するときに、キュー名の FormatName のキャメル ケース。メッセージ内のキュー名は svc の末尾で少し奇妙に見えますが、これは WCF の問題でしょうか? これが少なくとも正しい方向に進むのに役立つことを願っています.

于 2012-11-16T20:04:34.923 に答える
-1

これは通常、リモートキューのアクセス許可が原因で発生します。通常のシナリオは、プライベートキューを使用していて、これにwcfサービスからリモートでアクセスする場合です。

パブリックキューを使用してみてください。

于 2012-11-29T05:47:22.150 に答える