問題タブ [channelfactory]
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.
.net - ChannelFactoryの使用異なるクレデンシャルでチャネルを作成するには
このタイプを使用してWCFWebサービスChannelFactory<T>へのチャネルを作成していますが、サービスはユーザー名とパスワードの組み合わせを使用して認証を行っています。WsHttpBindingカスタムバリデーターを使用して認証を機能させていますが、異なる資格情報を持つチャネルを作成するのに問題があります。
作成のオーバーヘッドを考慮してChannelFactory<T>、アプリケーションの存続期間中に複数のチャネルを作成するために、その単一のインスタンスをキャッシュして共有しようとしています。残念ながら、クレデンシャルはファクトリに直接関連付けられており、チャネルの作成後に変更することはできないようです。
言い換えれば、私がこれを試してみると:
UserNameプロパティが読み取り専用になったことを通知する例外が発生します。
ここで任意の種類のキャッシュを実装することは可能ですか、それとも基本的にChannelFactoryすべてのユーザー名のインスタンスをキャッシュする必要がありますか?
wcf - WCF サービスと IIS の統合方法、着信要求のアーキテクチャとフロー
私は最近 WCF サービスを技術的にテストしており、理解が不足しているため、先に進んでタイムアウトの問題の解決策を見つけることができないところまで来ました。
Windows Server 2008 の IIS7 でホストされている WCF サービスの負荷テストを行っています。メッセージを起動するように設定されたシステムは、実際には、biztalk であるアプリケーションでメッセージを起動します。次に、Biztalk はメッセージを処理し、WCF サービスのエンド ポイントに送信します。WCF サービスもアプリ プールで .net 2.0 を使用しています (これは、完全なリリースではないため、実際には 3.0 または 3.5 である可能性があることを意味すると思いますか?
1 秒以内に 40 件のメッセージを送信し、クライアント (biztalk) での送信タイムアウトが原因で、それらの 90% がタイムアウトになります。サーバーの基本的な http バインディングの受信タイムアウトが最初にトリガーされると予想していたため、最初はこれは奇妙だと思いましたが、10 分に設定され、クライアントの送信タイムアウトが 1 分 30 秒に設定されていることが判明しました。
私が理解していること:
WCF サービスには、動作と http バインディングを内部に持つ構成ファイルがあります。XML メッセージを送信するサーバー エンドポイントは、BasicHtppBindings を使用しています。タイムアウト: オープン/クローズは 1 分、送信と受信は 10 分です。これまでのところ関与していることがわかっているサーバーのタイムアウトは、sendtimeout: 1 分です。
WCF のアーキテクチャは、チャネル ファクトリまたはサービス ホストのいずれかのインスタンスを作成することによって機能し、構成からの動作とバインディング設定をチャネルとして含むチャネル スタックを作成することを理解しています。チャネル スタックを介して処理された xml メッセージを移動するために使用される TransportAdaptor があります。
http.sys が着信要求を処理することを IIS から理解しています。要求をワーカー プロセスに渡し、それがビジー状態になると、要求をカーネル モード キューに配置しますか? このキューを増やしたり、このキューを制限したりするために設定できる machine.config 設定がいくつかあることを理解していますか?
また、アプリケーション プールを Webgarden にする方法についても知っており、コアあたりのスレッド数をデフォルトの 12 から増やすことができることを読みました。これは、レジストリ設定を介して行うか、後で .net で Web 構成を変更します。
InstanceContextMode と、それがサーバーのサービスにもどのように影響するかについて読んだところですが、この場合、それが何に設定されているかわかりません。
いくつかのパフォーマンス カウンター (.net カウンター) を記録したところ、現在の要求数から (Queued + Disconnected) = 12 を引いた数に気付きました。これは、1 つのコアを使用していることを示していますか? そのコアのスレッド数は 12 に設定されています。
より明確な全体像を得るために誰かが私を助け、私の知識をより完全なものに追加するのを助けることができますか?
c# - WCF チャネルと ChannelFactory のキャッシュ
そこで、WCF アプリケーションのパフォーマンスを少し上げて、Channels と ChannelFactory をキャッシュすることにしました。このすべてについて、始める前に解決しなければならない 2 つの質問があります。
1) ChannelFactory をシングルトンとして実装する必要がありますか?
2) 個々のチャンネルをキャッシュ/再利用する方法がよくわかりません。共有できるこれを行う方法の例はありますか?
私の WCF サービスは、エンドポイントが 1 つだけのスタンドアロン アプリケーションとしてデプロイされていることに注意してください。
編集:
回答ありがとうございます。まだいくつか質問がありますが...
1)どこでキャッシングを行うべきか混乱していると思います。このコードを使用するクライアント API を社内の別の部門に提供しています。このキャッシュはクライアントで発生しますか?
2) クライアント API は Silverlight アプリケーションの一部として使用されますが、何か変更はありますか? 特に、そのようなシナリオで利用できるキャッシュ メカニズムは何ですか?
3) GetChannelFactory メソッドの設計についてはまだよくわかりません。サービスが 1 つしかない場合、ChannelFactory を 1 つだけ作成してキャッシュする必要がありますか?
私はまだキャッシング機能を実装していません (なぜなら、それをどのように行うべきかについて完全に混乱しているためです!) が、これまでのところ、クライアント プロキシについて私が持っているものは次のとおりです。
c# - 別のモジュールで解決する場合、Unityはタイプを解決できません
現在、ユニティコンテナとWCFサービスを備えたPRISMアプリに取り組んでいます。モジュール(WCFプロキシを使用)で、次のようにWCFクライアントのChannelFactoryを登録します。
これで、すべてが正常に機能しているので、このChannelFactoryを別のモジュールで使用することにしました。モジュールのInitializeメソッドは次のとおりです。
したがって、このコードは、登録がないことを除いて、他のモジュールのコードとまったく同じです。
これを実行すると、次の例外が発生します。
ChannelFactoryの解決とCtorに問題があるようですが、なぜこのモジュールではなく最初のモジュールでファクトリを統一して解決できるのでしょうか。
また、登録時に特定のCtorに電話をかけたと思ったので、この例外メッセージもわかりません。
何か案は?
wcf - WCF ChannelFactory と接続タイムアウトのベスト プラクティス
私は、Windows サービスとして自己ホストされている WCF サービスにアクセスする winform アプリケーションに取り組んでいます。サービス参照の代わりに ChannelFactory を使用しています。WCF サービスの接続と呼び出しに成功しました。問題は、アプリケーションを 20 分間アイドル状態にしてから、別の呼び出しを試みたときです。次のエラーが表示されます。
「ソケット接続が中止されました。これは、メッセージの処理中にエラーが発生したか、リモート ホストが受信タイムアウトを超えたか、または基になるネットワーク リソースの問題が原因である可能性があります。ローカル ソケットのタイムアウトは '00:00:59.9489970' でした。」
接続の管理に関するベストプラクティスを探しています。現在、チャネルと ChannelFactory の状態をチェックする PrepareWCFConnection (以下を参照) という関数を作成しました。WCF サービスを呼び出す前に、このメソッドを呼び出します。これを処理するより良い方法はありますか?
c# - ChannelFactoryの反対は何ですか.CreateChannel?
このチュートリアルに従って、コードを少し試してみました。チャンネルにタイムアウトがあることをどこかで読んだことはほぼ間違いないので、最終的には自動的に閉じられる可能性があります。そのため、呼び出したいメソッドごとにクライアントで新しいチャネルを開くだけで、最終的に(多くの呼び出しの後)エラーが発生しました。
同時に開くことができるチャネルの数には制限があるようです。ただし、チャネルはカスタムオブジェクトのインスタンスであるため、他のチャネルを作成できるように、チャネルを閉じたり、強制終了したり、削除するために必要な処理を実行したりする方法がわかりません。
次に、実装する必要のあるCreateChannel ドキュメントに気づきました(上記でリンクしたチュートリアルでは実行できません)。だから、これは私が私のチャンネルを閉じる方法ですか?もしそうなら、どのようにそれを閉じるか、またはメソッドの実装で何をすべきですか?また、インターフェイスを実装する必要がある場合は、他のすべてのメソッドの実装で何をすべきですか?TChannelIChannelClose
それとも、それが続く限り、単一のチャネルを使用する必要がありますか?とにかく、私が持っているのが自分のクラスのインスタンスだけである場合、障害が発生しているか、開いているか閉じているかをどのように知る必要がありますか?
ご覧のとおり、私はこのテーマについてかなり迷っています。正しい方向に向けていただければ幸いです。
c# - ChannelFactoryの最大接続プール
サーバーにストレス負荷をかけるためのテストツールを作成しています。サーバーに個別のリクエストを送信するさまざまなスレッドを作成します。ChannelFactoryによって制限されているようです。たとえば、実際のサービスコールを行う際のボトルネックになります。
私はいくつかの異なるアプローチを試しました:
- すべてのスレッドで共有される単一の静的ChannelFactoryを使用する
- スレッドごとに新しいチャネルファクトリを作成する
- 呼び出しごとに新しいチャネルファクトリを作成する
これらはすべて、かなり類似したパフォーマンスをもたらします。チャネルファクトリが使用している利用可能な接続のグローバル静的プールがあるようです。これを調べてみましたが、何も見つかりませんでした。これについてもっと知っていますか?接続の静的プールがあるという私の推測は正しいと思いますか?もしそうなら、それがどのように構成可能か知っていますか?
これは、テストアプリケーションの現在の構成です。
c# - ChannelFactory の呼び出し方法動的に?
ChannelFactory<TChannel>私はクラスを呼び出す必要があります。ただし、以下のコードはChannelFactoryクラス用です。の呼び出し方がわかりませんChannelFactory<TChannel>。ChannelFactory<TChannel>クラスの呼び方を教えてください。
c# - エンドポイントが null ですか?
次のエラーが表示されます。
ChannelFactory.Endpoint の Address プロパティが null でした。ChannelFactory のエンドポイントには、有効なアドレスが指定されている必要があります
しかし、私はクライアント エンドポイントのアドレスを持っています。ここで何が起こっているのでしょうか?
コード:
クライアント:
サーバ:
wcf - チャネル用のWCFクライアントプロキシジェネレーターは管理しますか?
どのChannelFactroryラッパーをお勧めしますか?チャネル作成プロセスを処理し、必要に応じて再開できる単純なものを探しています。