問題タブ [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 - HTTP 経由の MSMQ 呼び出しが宛先キューに到達しない
MSMQ 通信を使用する WCF サービスがあります。ローカル ネットワークでサービスを実行すると、クライアント構成ファイルでサービス エンドポイントがホスト コンピューターを指すように構成されます。たとえば、サービス ホストで指定されたエンドポイントが次の場合です。
このエンドポイントにメッセージを送信するようにクライアントを構成します。
明らかに 192.168.1.5 はホスト コンピューターの IP であり、これは魅力的に機能します。私は IIS 7 でサービスをホストし、IIS で MSMQ リスナーを有効にし、適切なアクセス権を付与します ( Tom Hollanders の記事のほとんどすべて)。また、ブラウザーで http 経由でサービスにアクセスすることもできますが、私のクライアントを作成するときは、サービスは IIS でホストされ、クライアントApp.config
でエンドポイントを構成します。当然、クライアントを次のように構成します。
それは物事がうまくいかないところです。送信したメッセージは、クライアント マシンの送信キューに入れられ続けます。DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqService
キューの状態は常に「接続待ち」です。キュー転送プロトコルを に設定しようとしました。SRMP
キュー名は IIS で必要なサービス名と同じで、キューに適切なアクセス許可を与えました。最近、この問題に遭遇した人はいますか? 何か案は?だれかが MSMQ over HTTP の実際のサンプルを共有できれば、それは素晴らしいことです。
どんな助けでも大歓迎です。前もって感謝します。
msmq - NetMsmqBinding WAS サービスがワークグループのリモート MSMQ キューからのメッセージの読み取りに失敗する
net.msmq バインディングで WAS を使用して IIS でホストされているサービスがあります。このサービスは、プライベート トランザクション MSMQ キューからメッセージを読み取ります。サービスとは別のマシンにあるキューから読み取ることで機能する必要があります。キューが同じマシン上にある場合は機能しますが、別のマシン上にある場合は機能しません。
環境情報
- サーバーは Windows Web Server 2008 R2 を実行しています。
- サーバーはワークグループ内にあります。つまり、サーバーはドメインの一部ではありません。
- MSMQ は、ディレクトリ サービス統合機能なしでインストールされています。
- 必要な Windows 機能 (WCF Non-Http Activation および Http Activation、Message Queuing Server、Multicasting Support、Message Queuing DCOM Proxy、Windows Process Activation Service、.NET Environment、構成 API) がインストールされていると思います。
- マシンで次のレジストリ変更を行いました。
- NewRemoteReadServerAllowNoneSecurityClient = 1
- NewRemoteReadServerDenyWorkgroupClient = 0
- AllowNoauthenticatedRpc = 1
- DTC が有効になり、[ネットワーク DTC アクセス]、[リモート クライアントを許可]、[インバウンドを許可]、[アウトバウンドを許可]、[認証は不要]、[SNA LU 6.2 トランザクションを有効にする] がすべて選択されています。
- ファイアウォールの変更が行われました。
サービス構成情報
- netMsmqBinding を使用しています。
- netMsmqBinding のトランスポート セキュリティ モードは None です。
- ExactlyOnce は真です
- UseActiveDirectory は false
- 耐久性は本当です
- キュー アドレスは net.msmq://the-host-computer-name/private/EmailAsyncService です。
WCF ロギング
- 警告があります:
キューがトランザクションかどうかを検出できません". エラーのキューの FormatName は DIRECT=OS:ホスト コンピュータ名\private$\EmailAsyncService です。
- 次にエラーがあります:
'the-host-computer-name\private$\EmailAsyncService' > キュー パス名を形式名に変換するときにエラーが発生しました: 認識できないエラー -1072824300 (0xc00e0014)。キューに入れられたチャネルに対するすべての操作が失敗しました。キュー アドレスが有効であることを確認してください。MSMQ は、Active Directory 統合を有効にしてインストールする必要があり、アクセスできる必要があります。
私が試したこと
- MessageQueue インスタンスを手動で作成して使用すると、サービスが稼働しているマシンからリモート キューからメッセージを読み取ることができます。
- サービスをスタンドアロンのコンソール アプリケーションとしてホストしようとしました。エラーメッセージは同じです。
- 関連するファイアウォールを無効にしようとしました。
- http://msdn.microsoft.com/en-us/library/ms752246.aspxで変更を試みました。これは、ワークグループに参加しているコンピューターでそのようなサービスを実行することに関連しています。(「アクティブ化サービスとワーカー プロセスの両方を特定のユーザー アカウントで実行する必要があり (両方で同じである必要があります)、キューには特定のユーザー アカウントの ACL が必要です。ワークグループでは、サービスは無制限のアカウントを使用して実行する必要があります。 token.") 現在使用しているユーザー アカウントは Network Service です。
いくつかの考え
- ファイアウォールやアクセス許可の問題があるとは思いません。
- サービス構成で UseActiveDirectory が false に設定されているにもかかわらず、net.msmq://the-host-computer-name/private/EmailAsyncService のキュー アドレスが the-host-computer-name\private$ に変換されているようです\EmailAsyncService、これは私の知る限り、Active Directory を介した検索が必要な名前形式です。
wcf - MQ を介してアクティブ化された WF サービスに送信される MSMQ メッセージのクライアント側で優先度を設定する方法
WCF でアクティブ化されたワークフロー サービス (XAMLX) のセットアップがあります (WorkflowServiceHost を使用してホストされています)。
この WCF WebService には、'NetMsMqBinding' バインディングと、クライアントが操作をスケジュールするために使用する net.msmq ベースのエンドポイントがあります。
クライアント側では、Visual Studio を使用してプロキシ スタブを生成し、この WCF サービスと通信しました。すべてが正常に機能しており、サーバー上の (ジャーナリングされた) MQ にメッセージが表示され、WCF がキューからメッセージを取得して、メッセージに基づいて構成されたワークフローをアクティブにすることがわかります。
MQ に送信されるメッセージの優先順位を制御して、特定の WCF クライアントがワークフローの処理を優先できるようにする必要があります。
NetMsMqBinding は実際には MQ メッセージの優先順位付けをサポートしていないようです。これは正しいです?もしそうなら、どうすればこれを達成/シミュレートできますか? MQ トリガーを使用して、フラグに基づいてメッセージの優先度を変更できますか?
c# - IISホスティングでnetMsmqBindingバインディングを使用しているときにWCFサービスホスティングが失敗する
IIS でホストしているときに WCF サービスが失敗します。サービスの web.config は次のとおりです。
サービス契約は、
IIS でサービスをホストしているときに、次のメッセージが表示されます。
構成は既に exactOnce=false に設定されています。なぜこのエラーが発生するのかわかりません。何か助けはありますか?
.net - WCF以外のクライアントとのWCFNetMSMQBinding
WCFnetMsmqBindingに関連するクエリがあります。
netMsmqBinding
.Net以外のクライアントでwcfを使用することは可能ですか?Javaクライアントと言います。
wcf - netMsmqBinding を使用した WCF チャネルの障害
netMsmqBinding (MSMQ3) を介した WCF サービスがあります。サービスの一部の操作にはトランザクション機能がなく、ロールバックできないため、サービス コードは WCF トランザクション制御の下で実行されません。私が理解しているように、これは、有害なメッセージ処理などの利点が得られないことを意味します。したがって、サービスコードが呼び出されると、メッセージは永遠にキューから外れます。
サービスに重大な障害が発生した場合に、それ以上メッセージが失われるのを防ぎたいと考えています。そのため、失敗したばかりのメッセージをログに記録し、単純な例外 (FaultException ではない) を発生させます。他のすべての WCF サービス バインディングと同様に、チャネル (この場合は MSMQ チャネル ディスパッチャ) に障害が発生し、キューからそれ以上メッセージを受信しないことが予想されます。
しかし、私はこの動作(しゃれなし)を機能させることができないようです。サービス コードが例外をスローするかどうかに関係なく、サービスにルーティングされるメッセージを取得し続けます。
ここで何か不足していますか?リクエストごとに新しいチャネルが作成されるという点で、netMsmqBinding は http バインディングのように動作しますか? もしそうなら、私の問題を解決する方法についてのアイデアをいただければ幸いです。
.net - NetMsmqBinding を閉じるときにメッセージが失われる
非トランザクション キューを使用して WCF の NetMsmqBinding をテストしています。キューから読み取る部分であるサービスが閉じられると、メッセージが失われることがあることがわかりました。
たとえば、番号 1 から 10 のメッセージを含むキューがあり、再起動する前に最初の 5 つのメッセージ (1、2、3、4、5) を読み取ることができる場合、残りのメッセージは次のようになります。 (7、8、9、10)。'6'、サービスが終了する前に受信する予定だったメッセージが失われました。
これは、非トランザクション キューを使用しているためですか? トランザクションに移行せずにこれらのメッセージが失われるのを防ぐ方法はありますか?
ありがとう
msmq - 大量のMSMQを設計する
多くの通信サーバーがデータパケットを送信しています。これらのサーバープログラムからのこれらのデータパケットは、アップデーターが処理するまでMSMQに保存します。データの損失が懸念されており、これらのサーバープログラムからのデータパケットを失わないようにし、効率的でパフォーマンスの高いソリューションを求めています。
最良の設計アプローチは何でしょうか?
c# - WCF ランタイム動作属性
次の方法があるかどうか疑問に思っています。
メインの WCF サービスは、MSMQ に呼び出されたりバインドされたりするクラス ライブラリにあります。サービスをホストする別のコンソール アプリを用意します。
2 つの異なるプロジェクト。もちろん、コンソール アプリはメッセージを処理するクラス ライブラリを参照します。
有害メッセージのカスタム処理が必要です。問題ありません。属性を作成し、これをサービス自体の上に装飾してから、IErrorHandler を実装してメッセージを移動するカスタム クラスを作成できます。これはすべてクラスライブラリにあります
問題: サービスがメッセージの処理を続行するには、サービス ホストを再起動する必要があります。
しかし、クラス ライブラリにはサービスをホストするコンソール アプリへの参照がないため (また、そうすべきではありません)、不可能です。
クライアントを再起動する最良の方法は何ですか? 実行時に属性とエラーハンドラーをアタッチする方法があるのではないかと考えていました。これはコンソールアプリプロジェクトに移動され、サービスが作成されているときに実行時に何らかの方法で属性をアタッチする可能性がありますか? それとも私は夢中になっていますか?
wcf - MSMQDTCを使用したWCF-NHibernateセッションを閉じる
WCF MSMQサービス(Windowsサービスでホストされている)があります。私のメソッドには、TransactionScopeRequired属性があります。
Nhibernateを使用してデータをデータベースに保存しています。各呼び出しの後に、必ず各Nhibernateセッションを閉じたいと思います。
私はデータアクセスで次のアプローチ(城の施設を使用)を使用していました
しかし、メインのサービスメソッドが終了すると、Nhibernateセッションを既に破棄しているため、エラーが発生します。DTCは、コミットを実行するためにこれが必要だと思います。
私の質問は:
DTCがコミットした後(つまり、サービスメソッドを終了した後)にNhibernateセッションを閉じるための最良の方法は何でしょうか?
ありがとうございました。