問題タブ [netmsmqbinding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - MSMQ を介した WAS アクティベーションは伝説ですか?
IIS/WAS アクティベーションを使用した MSQM 経由の WCF サービスの 4 回目または 5 回目の実装に取り組んでいます。そして、私はそれを適切に機能させることができませんでした。これは常に同じ話です。私のサービスは、IIS Web サイトが他の方法で対話された場合にのみアクティブになります (/somewhere/myService.svc でサービス メタデータ ページを処理するなど)。突然、キューにメッセージを送信するだけの場合、サービスはメッセージの処理を停止し、.svc ページにアクセスするとすぐに再起動します...
これは私にとって非常に一般的なパターンであるため、共通の解決策にたどり着きました。そのページにアクセスする powershell スクリプトを実行するジョブを (数分ごとに) スケジュールすることです。非常にシンプルですが、あまりエレガントではありません。さらに、理論上不要です。
これは、さまざまな IIS バージョン (7.0 および 7.5)、さまざまな Windows 2008 サービス パックおよびリリース、および AD ドメインまたはワークグループ内のサーバーで発生しました。これに関する Web 上のすべての情報、特に MSDN と microsofties のブログを読んだと思うので、バインディングの構成、MSMQ のアクセス許可、およびあちこちで見つけることができるその他すべての詳細が設定されています。
質問: WAS over MSMQ で成功した人はいますか?
c# - MSMQ WCF 再試行メッセージ ブロック
Windows Server 2012 で実行されている社内サービス バスに送信されたメッセージのトランザクション処理に MSMQ を使用しており、メッセージ処理が失敗したときに問題が発生しました。
サービスのセットアップ
サービス
バインディング
ご覧のとおり、メッセージごとに 100 回の再試行を制限して、1 時間ごとに実行されるサイクルがあります。メッセージの TTL は 24 時間 (デフォルト) であるため、これはデフォルトでは達成されません。
MSMQ にトランザクションがあり、サードパーティによってプロセスが実行されているために失敗する可能性があります。メッセージは再試行サブキューにドロップされます。さらにいくつか入ってきて、同じことが起こります。たとえば、20 回の失敗があるとします。
現状では、最初のメッセージ (場合によっては 2 番目のメッセージも?) のみが再試行され、これはおそらく同じ失敗したプロセスになるため、トランザクションを再びコミットしません。
再試行サイクルの期間に達したすべてのメッセージがメイン キューに移動されて再試行されることを期待しますが、これは起こりません。一番上のメッセージは、TTL に達するか、最終的に成功するまでブロックし続けます。
再試行期間に達したすべてのメッセージをブロックおよび処理しないようにキューの動作を設定する方法です。
たとえば、10 分以内に 20 件のメッセージが受信された場合、それらがすべて失敗した場合、最初のメッセージのみが 1 時間ごとに再試行され、残りの 19 件は最初のメッセージが TTL に達するまでそこに留まり、試行されます。 TTL に達したため、再試行キューからも削除されます。
メッセージングが FIFO ベースで機能することと、Vista で MSMQ を実行する前は、メッセージが失敗すると他のメッセージがブロックされるため、再試行メッセージ キューが発生することを理解しています。しかし、これは問題を再試行サブキューに移しただけではありませんか?
wcf - MSMQ + WCF - 遅延が大きくなる再試行
WCF で MSMQ 4 を使用しています。メッセージをキューに入れる Microsoft Dynamics プラグインがあります。サービスがメッセージを受け取り、別の Web サーバーに HTTP 要求を送信します。Web サーバーは、別のメッセージを別のキューに入れることで応答します。2 番目のサービスがメッセージを受け取り、応答を Dynamics に送り返します...
再試行キューを 3 回再試行するように設定し、5 分間待ってから再試行します。Dynamics システムは (他のプラグインが原因で) 非常に長い時間がかかる場合があり、データベース トランザクションがコミットされる前に往復できます。ユーザーには、さらに 5 分間、更新が反映されていません。
段階的に再試行するように再試行メカニズムを構成する方法があるかどうか興味があります。そのため、最初に失敗したときは、数秒しか待機しません。2 度目に失敗すると、その 2 倍待機します。そして、再試行間の時間は増え続けています。
再試行の間隔を短くするだけの問題は、不適切なメッセージがログ ファイルを簡単にいっぱいにしてしまうことです。
wcf - MSMQ + WCF - メッセージをすぐに配信不能キューに移動する
キュー (MSMQ) でメッセージをリッスンする WCF サービスがあります。HTTP ステータス コードを返す Web サーバー (REST API) に要求を送信します。
ステータス コードが 400 の範囲内にある場合、メッセージは破棄されます。アイデアは、400 範囲のエラーが成功することは決してない (未承認、不正な要求、見つからないなど) ため、再試行を続けたくないということです。
他のすべてのエラー (例: 500 - 内部サーバー エラー) については、メッセージを "再試行" キューに入れるように WCF を構成しています。再試行キューのメッセージは、一定の時間が経過すると再試行されます。サーバーが一時的にダウンしているため、しばらく待ってからもう一度試してください。
WCF の設定方法FaultException
では、サービス コントラクトで をスローすると、自動的にメッセージが再試行キューに入れられます。
メッセージが 400 範囲のエラーを引き起こした場合、エラーを飲み込んでいるだけです (ログに記録するだけです)。これにより、再試行メカニズムが起動されなくなります。ただし、メッセージを配信不能キューに移動することをお勧めします。このようにして、ユーザーやシステム管理者に電子メールを送信することでエラーに対応できます。
これらの不良メッセージをすぐに配信不能キューに移動する方法はありますか?
c# - MSMQ - 現在処理中のメッセージを照会できますか?
MSMQ エンドポイントで WCF を使用しており、この質問で説明されている動作が見られます。基本的に、サービスは一度に 1 つのメッセージを処理するように調整されていますが、2 つのメッセージがキューから取得され、1 つがメモリに保持されているように見えますが、もう 1 つがメモリに保持されているようです。処理中です。
これは、何が起こっているかを監視する上で問題を引き起こします。どのジョブがキューにあり、どのジョブが処理されているかを示す監視ページがありますが、この動作により、ジョブがキューから取り出されたときに効果的に消える期間がありますが、まだ処理が開始されていません。MessageQueue.GetAllMessages()
現在キューにあるメッセージのリストを取得するために使用しています。
私は MSMQ にはあまり詳しくありませんが、メッセージがキューから取り出されると、他のプロセスが削除しないように非表示としてマークされると思います。これらのメッセージを照会して、それらが何であるかを確認する方法はありますか?
c# - メッセージが MSMQ に追加されない
初めて MSMQ サービスを実行しようとしています。
MSDN から例をコピーして、それを機能させようとしています。
すべて正常に実行され、エラーはありません。しかし、MSMQ を調べてみると、使用できるメッセージや追加されたメッセージはありません。
トレース ツール SvcTraceViewe.exe を使用しましたが、エラーは報告されていません。
これは、クラス DLL で定義された私のサービスです。
これは、上記の DLL を呼び出すサーバー ホストです。
これは、ホスト アプリの app.config 設定です。
これは、サービスを呼び出すクライアント アプリです。
これは私のクライアント app.config です:
メッセージ キューが作成されていることを確認しました。
1)。メッセージはどのようにキューに追加されますか? 私のサービスの空のメソッドのポイントは何ですか? 2)。メッセージが追加されないのはなぜですか?
ありがとう
注意
コードを次のように変更しました。
c# - C# で長い COM 操作を実行すると、有害なメッセージを削除できません
私はこれに1週間取り組んでおり、StackOverflowを広範囲に使用していますが、これを理解することはできません.
オートデスク製品の C# でプラグインを作成しており、(Marshal を使用して) 別の 3D アプリケーションに接続しています。過去に何十もの他のプラグインでこれを問題なく実行しました。
このプロジェクトはユニークです。別の 3D アプリケーションから、大規模なモデルに対して長時間実行タスク (ファイルのエクスポート) を実行しています。場合によっては1~60分かかります。
「「アプリケーション」が応答していないため、このアクションを完了できません。「切り替え」を選択して...」という有害なメッセージが表示されます。技術的には、アプリケーションが見つかるまでクライアントに「再試行」をクリックさせることができますが、それは望ましくありません。
私は当初、DoEvents タイプのものを配置するだけで、エクスポートが完了するのを待つと思っていましたが、エクスポート サブルーチンの実行中に有害メッセージが表示されます (これは有害メッセージの最初の発生であるため、学習中です)。次に、バックグラウンド スレッドでこのエクスポート操作を実行し、ThreadPool および Thread 操作をテストすることを検討しました。ただし、サービスを「開始」することはできますが、別の 3D アプリケーションからモデルをエクスポートすることはありません。それは永遠に実行されます。 (私はそのサブ問題の解決策を探しているのではなく、以下で説明しようとしていることを探しているので、元の投稿からエラー メッセージを削除しました)
最後に、NetMsmqBinding を変更しようとしました (これについては何も知りませんが、学習しようとしています)。許可される再試行回数がより大きな数に設定されることを期待しています。
ただし、NetMsmqBinding の値を何に変更しても、常に「再試行」メッセージが同時に表示されます。正しく書いていないといけません。他の例では、これらの値を含む xml ファイルに気付きましたが、その xml が何であるかはわかりません。また、別の xml ファイルを処理するよりも、プラグインでこれを実行したいので、知りたいとも思いません。
仮説 (console.write BS の多く) でこれに対処する方法について多くの例を見つけていますが、長時間実行されている COM プロセスがメインの C# ユーティリティを中断している具体的な例を実際に持っているものはありません。
再試行の頻度とサイクルをリセットして、有害なメッセージが表示されないようにする方法を知りたいです。どうやってやるの?
いくつかのコンテキストを提供するためのコードを次に示します。