問題タブ [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.
c# - 空を示すキュー
ですから、これは私にとってかなり新しいことであり、進歩を遂げています。現在、netmsmqbinding を使用して単純なメッセージをキューに送信する wcf サービスがあります。すべてがスムーズに実行され、イベント ビューには、メッセージがキューに入れられたことが示されます。私が実際のキューに行ったとき、そこには何もありませんが。サービス、サービス ホスト、および ASP Web アプリがあります。Web アプリには、サービスへのサービス参照があることに注意してください。イベント ビューアの msmq ログにも、3 つのイベントが表示されます。任意の支援をいただければ幸いです。ありがとう。
これが私のセットアップです。
サービス インターフェイス:
サービス:
サービスの App.Config:
サービスホスト
サービス ホストの App.Config:
MVC コントローラー
Web.config のサービス モデル (自動生成):
MSMQ ログからのイベント: ここで表示するために一部を変更しました
ID CN=msmq,CN=blah,OU=blah,OU=blah,DC=blah,DC=local\8280 のメッセージがキュー PRIVATE=blah に送信されました
ID CN=msmq,CN=blah,OU=blah,OU=blah,DC=blah,DC=local\8280 のメッセージがキュー PRIVATE=blah に入れられました
メッセージを受け取りました
c# - WCF MSMQ - 別のポートでの SRMP
MSMQ を介して WCF エンドポイントにメッセージをプッシュするアプリケーションがあります。
開発では、MSMQ プロトコルを使用するとうまく機能しますが、運用環境ではネットワーク ホップを行う必要があります。キューが特定のポート (22200) で HTTP 経由で WCF エンドポイントにプッシュされるように、これを設定する必要があります。
これは SRMP で動作すると思っていましたが、動作していません。発信 MSMQ がハングし、「接続を待機しています」というメッセージが表示されます。
確認したところ、正しいポートで URL にアクセスできました。
問題が何であるかをどのように解決しますか?
以下は、私のクライアント アプリケーションの構成です。
.net - MSMQ トランスポート エラー
「トランスポート」セキュリティでメッセージを送信しようとすると、次のエラーが発生します。
キューへの送信中にエラーが発生しました: ユーザーの内部メッセージ キュー証明書が存在しません。(-1072824273, 0xc00e002f).MSMQ がインストールされ、実行されていることを確認します。ローカル キューに送信する場合は、必要なアクセス モードと承認を備えたキューが存在することを確認してください。
私の構成はトランスポートセキュリティを使用しています:
実際に証明書をインストールする必要がありますか? それは証明書レベルのセキュリティのためだけだと思っていました...
wcf - WCF がメッセージをディスパッチする前に、MSMQ ルックアップ ID はどこで確認できますか?
IIS でホストされている WCF サービスがあり、netMsmqBinding
. メッセージがサービスにディスパッチされる前に、 MSMQ ルックアップ IDをログに記録したいと考えています。この情報はどこで確認できますか?
にはMessageLookupIdプロパティがあるIErrorHandler
ため、で取得します。例外をメッセージと関連付けるために、リクエストの開始時にログに記録する必要があります。MsmqPoisonMessageException
これには適切な場所だと思いましたが、ルックアップ ID を取得できるプロパティがAfterReceiveRequestIDispatchMessageInspector
メソッドに見つからないようです。
.net - 名前にアンダースコアが含まれるキューからメッセージが取得されない
QueuedService.TicketingService.svc
IIS で application name の下にホストされている WCF サービスがありますQueuedService_1_1
。したがって、サービスの完全な URL は次のとおりです。
サービスには net.msmq エンドポイントがあります。
MSMQ に次の名前のキューを作成しました。
このサービスを呼び出すと、メッセージはキューに配信されますが、サービスによって取得されません。ブラウザでサービスの URL にアクセスすると、メッセージがサービスによって選択されます。
名前付け、つまり_1_1
IIS アプリケーション名とキュー名に問題がありますか? _1_1
IISQueuedService
と名前付きのキューを使用せずに同じサービスをホストするとQueuedService/QueuedService.TicketingService.svc
、それが機能するためです。
wcf - Kerberos クロック スキューが原因で、WCF サービスへの遅延 MSMQ メッセージが失敗する
IIS で netMsmqBinding を使用して WCF サービスを実行しています。メッセージの暗号化と署名に kerberos を使用する「Windows」クライアント資格情報タイプで「メッセージ」セキュリティを使用するように構成されています。サービス コントラクトは ProtectionLevel.EncryptAndSign を適用します。クライアントからサービスへのトランザクションが使用されていることに注意することが重要な場合があります。
サービスが稼働しているとき、通信は問題なく機能します。ただし、遅延メッセージの耐久性をテストするため、またはサービスに到達できない場合に、IIS でサービスのアプリケーション プールを一時的に無効にしました。次に、クライアントからメッセージを送信します。クライアント マシンの発信キューを離れ、サーバーのプライベート キューに転送されます。.NET MSMQ リスナーはメッセージを取得し、WCF サービス メソッドを呼び出そうとしますが、期待どおりに失敗します。約 10 分後、アプリケーション プールを再度有効にします。サービス トレース ログに、次の例外が記録されます。
また、サーバー上でメッセージ キュー サービスをオフラインにして、同じシナリオを試しました。結果は同じです。
私の推測では、クライアントはメッセージを暗号化するために kerberos チケットを取得しますが、メッセージは (少なくとも) 10 分後に WCF サービスによって復号化されるため、クロック スキューが検出されます。もちろん、クライアントとサーバーの両方で時計を手動で確認しましたが、それらは同じです。
クライアント構成:
サーバー構成:
これはどのように機能するはずですか?私は何が欠けていますか?
編集:
このページには、「キューに入れられた通信に Kerberos プロトコルを使用する際の問題は、キー配布センター (KDC) が配布するクライアント ID を含むチケットの寿命が比較的短いことです。」それは役に立ちます。
kerberos メッセージ セキュリティの優れた点は、ほとんどそのままで機能することです。
編集2:
両方のサーバーで時間を確認したところ、両方のクライアントでスキューが約 0.1 秒でした (DC01 はドメイン コントローラー)。
そしてサーバー:
wcf - WCF - 新しい環境で MSMQ エンドポイントが見つからない
セットアップ
Windows Server 2012R2 で実行されている IIS/AppFabric でホストされている WCF サービスがあります。サービスは、netMsmqBinding を介してローカルのトランザクション MSMQ キューにバインドされます。私の操作は、TransactionScopeRequired = true で装飾されています。サービス操作は、BizTalk サーバーから呼び出しを受け取り、それらを処理し、netMsmqBinding を介して (同じ BizTalk サーバー上の) リモート キューに応答を返します。
テスト環境では、これは意図したとおりに機能します。
テスト環境での物理的なセットアップ: サーバー int01test.mydomain.com は、BizTalk サーバーと受信キューをホストします。これは、サービス アカウント mydomain\inttestuser で実行されます。サーバー app01test.mydomain.com は、アプリケーション (IIS/AppFabric)、データベース (SQL サーバー)、および送信キューをホストします。これは、サービス アカウント mydomain\apptestuser で実行されます。
問題
このソリューションが受け入れテスト環境に昇格すると、呼び出しは引き続き処理されますが、応答はエラー メッセージでブロックされます。
System.ServiceModel.EndpointNotFoundException: キューを開いているときにエラーが発生しました: 認識できないエラー -1072824317 (0xc00e0003)。メッセージをキューから送受信できません。MSMQ がインストールされ、実行されていることを確認します。また、必要なアクセス・モードと許可でキューを開くことができることも確認してください。---> System.ServiceModel.MsmqException: キューを開いているときにエラーが発生しました: 認識できないエラー -1072824317 (0xc00e0003)。メッセージをキューから送受信できません。MSMQ がインストールされ、実行されていることを確認します。また、必要なアクセス・モードと許可でキューを開くことができることも確認してください。
違い
テスト環境では、サービスとデータベースが単一のサーバー インスタンスで実行されています。(ただし、BizTalk Server とそのキュー (送信メッセージのターゲット) は別のサーバーにあります) 受け入れテスト環境では、私のソリューションは負荷分散された 2 つのサーバーに展開され、データベースは別のクラスターに配置されます。運用環境を模倣するための、より厳格な外部ファイアウォール ルールもあります。BizTalk サーバーでさえクラスター化されていますが、現在はクラスター間ではなくマシン間で通信しています。
QA 環境でのセットアップは次のとおりです。 サーバー int01qa.mydomain.com (int02qa.mydomain.com でクラスター化) は、BizTalk サーバーと受信キューをホストします。これは、サービス アカウント mydomain\intqauser で実行されます。サーバー app01qa.mydomain.com (app02qa.mydomain.com でクラスター化) は、アプリケーション (IIS/AppFabric) と送信キューをホストします。これは、サービス アカウント mydomain\appqauser で実行されます。サーバー db01qa.mydomain.com が私のデータベースをホストしています。
すでに試したこと
- リモート キューでの認証を無効にしました。
- 私のサービスが実行されているアカウントと「全員」に完全な制御を許可しました。
- 2 つのサーバー間で msmq メッセージを手動で送信することに成功しました。
- 応答をローカルのプライベート キューに送信するようにサービスを構成しましたが、同じエラーが発生しました。
c# - Message Queue サービスのメッセージが届かない
メッセージキューイングを介してこのWCFサービスを利用しています。
サービスは次のように構成されます。
バインディングはこんな感じ
ローカルで正常に動作するかなり基本的なメッセージ キュー サービス
プロキシを生成して関数メッセージを呼び出した後、サービスに到達しません。サービスを停止すると、キューに入ることはありませんが、クライアント マシンの送信キューにすぐに表示されることがあります。
トレース ファイルは、トランザクションであるかどうかを確認できないことを除いて、すべて問題ないことを示しています。それは...
もう何を試せばいいのかわかりません。うまくいくはずだと思いますが、そうではありません。他に何を試すことができますか?