問題タブ [servicepointmanager]

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.

0 投票する
1 に答える
181 参照

c# - ChannelFactory: Channel Close() が接続を閉じていない (netstat が ESTABLISHED を示している)

WCF サーバーと通信している WPF アプリケーションがあります。

1 つの ChannelFactory を使用して、呼び出しごとにチャネルを作成しています。

アプリケーションの起動時にサーバーに多くの要求があり、ある時点で停止してタイムアウトになります。netstat を見ると、サーバーへの接続が確立されていることがわかります。

ServicePointManager.DefaultConnectionLimit を 10 に変更すると、サーバーへの呼び出しをさらに処理できますが、しばらくするとタイムアウト例外が発生して停止します。

ServicePointManager.DefaultConnectionLimit を int.MaxValue に設定すると、すべてのリクエストが処理されますが、サーバーへの ESTABLISHED 接続が約 720 あります (サーバーの netstat で同じ結果が得られます)。

私はここで2つのことについて混乱しています:

  1. WCFは接続をプールしていないようですが、リクエストごとに新しい接続を作成しています
  2. チャネルを閉じた後でも、接続は確立されたままのようです。

ServicePointManager.FindServicePoint(new Uri(" https://server:3000 "));も確認しました。そして、CurrentConnections が ServicePointManager.DefaultConnectionLimit として設定した制限に達していることを確認します。

ServicePointManager.MaxServicePointIdleTime を 500 に減らしました。これにより、接続がより速く閉じられますが、呼び出すたびに接続が作成されます。

サーバーと通信するときに既存のチャネルを再利用するようにチャネル ファクトリを説得するにはどうすればよいですか。

これは私のバインディングです: