問題タブ [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 - IIS/WASサービスがMSMQ4.0を使用するWin2k8R2のロックキューをクリーンアップしないのはなぜですか
IIS / WASでホストされているサービスを、開発環境で自分自身として実行しています。net.msmqバインディングを使用してアクティブ化されます。キューのロックを伴うBufferedReceive(WFサービス)を使用するように構成されています。(接頭辞lock_のサブキューが作成されます)。
しばらくして、アプリプールが終了すると、ロックキューは自動的に削除されます。
システムを本番環境に移行した後、環境AFAIKは同一ですが、サービスが専用アカウントとして実行されているため、ロックキューはクリーンアップされなくなりました。アプリプールを停止すると、ロックキューが残り、メッセージが表示されます。
最も明らかな違いは、サービスが実行されているアカウントですが、これに影響を与えている権限の種類がわかりません。あるいは、私が見落としている他の構成の違いはありますか?手伝ってくれてありがとう。
wcf - (デッドレター)キューからプルするサービスを取得できません
リモートマシンにlogという名前のキューがあります。そのキューをローカルで呼び出すときは、NetMsmqBindingを変更して、カスタムのデッドレターキューを指定します。
これは正常に機能します。メッセージが宛先に到達しないように強制すると、メッセージはこのキューに表示されます。
これで、デッドレターキューを読み取るためにIIS/WASでホストされているサービスがあります。これは、Services / Logging/LogDeadLetterService.svcのServicesというサイトでホストされていました。これが私の設定のサービスです:
そして、これが私のアクティベーションです:
私の実際のサービスは基本的にこれです:
私のキューはトランザクションで認証されています。サービスサイトとロギングアプリケーションの両方で有効なプロトコルとしてnet.msmqを含め、サービスサイトにnet.msmqバインディングを追加しました。バインディング情報をとして持っている場合、 http://appdev.me.com/Logging/LogDeadLetterService.svc(appdev.me.comは私のHOSTSファイルで設定されています)をappdev.me.com
参照すると、次のエラーが発生します。
バインディング情報をとして持っている場合localhost
、次のエラーが発生します。
どちらの方法で設定しても、サービスはデッドレターを取得しません。これは、イベントログではなく、キューに残っているためです。
今、私はこれらの両方が許可の問題を参照していることに気づきました。ただし、認証部分を理解する前にこのコード部分をテストするために、Everyone、Authenticated Users、NETWORK SERVICE、IIS_USERS、ANONYMOUS LOGON、および私を含む、考えられるすべての人にフルコントロールを与えました。(アプリプールは私として実行されています。)
私のサービスをこのキューからプルできるようにする方法についての助けは驚異的です。ありがとう!
編集:このMSDNブログエントリに よると、0xC00E0003はMQ_ERROR_QUEUE_NOT_FOUNDに対応し、0xc00e0025はMQ_ERROR_ACCESS_DENIEDに対応するため、バインディング情報をとして取得したいようですappdev.me.com
。ただし、それでも、発生している明らかな権限の問題は解決されません。
EDIT2: コンソールアプリでサービスをホストし、次のエンドポイントを提供すると機能します。
では、コンソールアプリでは、IISで起こっていることとは何が違うのでしょうか。上記の編集により、私はキューにぶつかっているとかなり確信しています。それで、なぜ私はそれに入ることができないのですか?
EDIT3:ここに記載されているアドバイスに従ってServices / Logging/LogDeadLetterService.svcをLogging/LogDeadLetterService.svcに変更しましたが、変更はありません。
//
[ボーナス質問:デッドレターキューで毒メッセージを処理する必要がありますか?]
wcf - WCF サービス間メッセージング
2 つの WCF サービスを使用してシステムを構築しています。どちらも IIS でホストされています。現時点では、両方とも単一の VS2010 Web サイト アプリに存在し、Derfault Web サイトを使用してローカルの IIS7 (Windows 7) で実行されています。両方で net.tcp を有効にしました。
サービス1
- webHttpBinding を使用して HTTP 投稿を受け入れる
- シリアライズ可能な複合オブジェクトでデータをラップします
- netMsmqBinding を使用して複合オブジェクトを Service2 に送信します (期待しています)。
サービス2
- 上記のメッセージを受け取り、それに対して何かをします
サービス 1 は期待どおりに動作しますが、構成されたプライベート キューにメッセージを配置する代わりに、コードはハンドルを使用して「送信キュー」の下に新しいキューを作成しています。
もちろん Service2 にはメッセージが表示されません。この構造を試みたのはこれが初めてなので、その場所のために Service2 がメッセージを見逃しているかどうかはわかりませんが、私が読んだ内容に基づいて、そう思われます - 私は遭遇していませんこのキュー作成動作について言及しているもの。
質問:
これを正しく行っていますか (構造、web.config、またはコードに何か問題がありますか)?
VS Debug で適切に実行すると、Service1 の
proxy.ProcessForm(formMessage);
Service2コードでブレークポイントにヒットしますか、またはService2デバッグを処理する別の方法がありますか(たとえば、Windowsサービス)?
Service1 Web.Config
HTTP Post Service1 を受信すると、次の処理が実行されます。
wcf - NetMsmqBindingをマルチキャストで使用できますか?
マルチキャストMSMQの例をまとめようとしています。PGMを使用したマルチキャストで私が見つけたすべての例には、統合バインディングがあります。MsmqMessageを使用するためにすべてのコントラクトを変更する必要はなく、メッセージにセキュリティを付加できないのではないかと心配しています。私が見落としているものはありますか、それとも私は自分自身を隅に塗りましたか?
asp.net - アプリケーション プールがリサイクルされるとすぐに、Net.Msmq バインディングがキュー内のメッセージを取得しない
「アプリケーションプールが「生きている」とき、サービスはメッセージを正しく取得しますが、アプリケーションプールが(タイムアウトまたはその他の理由により)リサイクルされるとすぐに、サービスはメッセージの取得を停止し、キューに留まりますサービスの Web ページを参照して、サービスが再開されるまで」
サービスを手動で参照せずにサービスを有効にするための解決策を見つけましたか。
wcf - WCF と MSMQ - メッセージ本文の変換で複雑なパラメーターが失われる
WCF と MSMQ を介してメッセージを送信し、送信前にメッセージ コンテンツに変換を適用しようとしています。
Client Message Inspector の BeforeSendRequest イベントでメッセージをキャプチャし、メッセージを xml として取得し、Xslt 変換を適用して、メッセージが作成されたときに null だった SOAP メッセージのパラメーター値を本質的に置き換えることができます。ただし、メッセージが他のエンドポイントに到着すると、メッセージに値を挿入するために最善を尽くしたにもかかわらず、パラメーターはまだ null です。
期待されるパラメーターを含むようにメッセージをハードコーディングすると、すべて期待どおりに機能しますが、変換を適用すると null 値で「失敗」するだけです。ここで何か根本的に間違っているのか (これらのトピックのほとんどは初めてです)、それとも SOAP xml が単に間違っているのかわかりません。
応答をハードコーディングしたときに作成された xml を調べ、これを変換の基礎として使用しました。出入りするときにメッセージを調べ、名前空間をいじって、一掃されるまでグーグルで検索しました...どんな助けも大歓迎です!
変換されたメッセージの本文部分は次のとおりです。
変換では、ソース メッセージからすべてのノードをコピーし、「clientOrderData」要素を上記の xml に置き換えます。
対象契約は以下の通りです。
ClientOperationResult のデータ コントラクトは次のとおりです。
OperationResult は Object 型であり、実行時に文字列を提供していることに注意してください。それがこれに関係しているかどうかわかりませんか?私が言うように、ハードコードされた ClientOperationResult を提供すると機能しますが、変換で同じことをしようとすると機能しません。
それがすべて明確であることを願っています。ありがとう、W
wcf - サービス (.svc) がルートにある MSMQ の WCF アクティベーション
VS 2012/.NET4.5、Windows 8/IIS8 および 64 ビット
WCF サービス アプリケーションを使用して、サービス名に一致するように MSMQ キューに名前を付けるこれまでに見たすべてのドキュメントは、IIS Web サイトの下のアプリケーションまたは仮想ディレクトリを使用しているという事実を前提としています。
これは MSDN http://msdn.microsoft.com/en-us/library/ms789042.aspxから引用されています
アクティブ化されるアプリケーションは、キュー名のプレフィックスと一致 (最長一致) する必要があります。
たとえば、キュー名は msmqWebHost/orderProcessing/service.svc です。アプリケーション 1 の仮想ディレクトリ /msmqWebHost/orderProcessing の下に service.svc があり、アプリケーション 2 の仮想ディレクトリ /msmqWebHost の下に orderProcessing.svc がある場合、アプリケーション 1 がアクティブになります。アプリケーション 1 を削除すると、アプリケーション 2 がアクティブになります。
ただし、IIS 7 WAS で MSMQ 対応サービスをホストしている場合、キュー名はサービスの .svc ファイルの URI と一致する必要があります。この例では、MsmqService.svc という .svc ファイルを使用して MsmqService というアプリケーションでサービスをホストするため、キューは MsmqService/MsmqService.svc という名前にする必要があります。WCF サービスに使用されるキューは常にプライベートにする必要があります
そして、http://msdn.microsoft.com/en-us/magazine/cc163357.aspx
MSMQ エンドポイントのアクティブ化は、キューが .svc ファイルと同じ名前 (マシン名を除いたもの) である場合にのみ正しく機能することに注意してください。つまり、サービス エンドポイントが /server/app/service.svc の場合、キュー名は app/service.svc でなければなりません。
MyService.svc ファイルは IIS Web サイト (統合モードで .NET 4 プールを使用) のルートの直下にあるため、次のことを行いました。
- MyService.svc という名前のプライベート トランザクション キューを作成し、Network Services にフル コントロールを付与します (テスト用)。
- web.config エンドポイントの設定: address="net.msmq://localhost/private/MyService.svc"
- (2) のアドレスを使用して、クライアント テスト アプリケーションを使用してメッセージをキューにプッシュできました。
- 以下を実行して、MSMQ プロトコルのサポートを Web サイトに
C:\Windows\System32\inetsrv>appcmd set site "MyWebsite" /+bindings.[protocol='net.msmq',bindingInformation='localhost']
追加しました (そして、サポートが適切に追加されていることを確認しました)。 - 私が持っている私のウェブサイトの詳細設定
http,net.tcp,net.msmq
からEnabled Protocols
- メッセージが到着したときにサービスをアクティブ化する役割を担う「Net.Msmq Listener Adapter」が実行されていることを再確認し、再起動しました。
- 私の
web.config
:
新しいメッセージがキューに到着してもサービスがアクティブ化されず、メッセージがキューに残ります。これは、アプリケーションまたは仮想ディレクトリを使用していないためですか、それとも不足しているものがありますか?
wcf - 長時間実行される WCF MSMQ 処理
私はProgramming WCF Services 3rd Edを読んでいます。ジュヴァル・ローウィ著。NetMsmqBinding について説明している「Queued Services」の章の 473 ページで、彼は次のように述べています。キューに入れられた呼び出しを長い非同期呼び出しと同一視するためです。」
1) ショートコールとは?2) 長時間実行する操作のベスト プラクティスは何ですか。それらを ThreadPool に送信しますか?
この記事は、実際には同じ問題に遭遇しました: WCF & MSMQ & TransactionScope long process
私は何度も調べましたが、インターネット上でこの問題に関するベスト プラクティスを見つけることができません。
3) 取引がない場合、このルールは適用されますか?
wcf - NetMsmqActivator を使用して既定以外のサイトをアクティブ化する
80 以外のポートで実行されているサイトを NetMsmqActivator サービスでアクティブ化することはできますか?
私が知る限り、net.msmq URI でポート番号を指定することはできないため、NetMsmqActivator が既定のポート以外のポートで実行されている場合に正しいサイトを見つける方法は考えられません。 (80)。誰かがこれを確認できますか?