私はインターネットを閲覧し、答えを求めてスタックオーバーフローしましたが、私の問題に対する明確な答えを得ることができないようです。
全国に約50のクライアントがあり、Windowsサービスを介してサーバーへのWCF WSHTTPBinding呼び出しを10〜20分ごとに定期的に自動的に開きます。これは、サーバーを介して接続して長時間実行する操作を実行できるクライアントの数を制限しているため、うまく機能します。クライアントは、何もできないことを認識し、次にチェックインするときに試行します。
これは、同じルーターの背後に7つの別々のシステムがある1つのクライアントで、非常に遅いインターネットの問題が発生し始めた昨日まで、うまく機能していました。したがって、これらの7つのシステムは、10〜20分ごとにサーバーへの接続を開き、「チェックイン」手順を実行します。呼び出しにはしばらく時間がかかり、サーバーへの最大7つの接続を使用して、各システムを一度にサービスに接続できます。他の43のシステムも、10〜20分ごとに「チェックイン」する必要があります。しかし、7つのシステムを持つクライアントのインターネットが遅いため、サービスで長時間実行されているプロセスへの呼び出しに通常よりも時間がかかり、最終的にクライアントでタイムアウトになりました(セキュリティタイムスタンプエラーが古くなることもありました)。
私のサービスはクライアントのインターネットの問題の影響を完全に受けないようにする必要があり、サービスは「チェックイン」を続ける他のクライアントにサービスを提供し続ける必要があります。
これで、サービス側にサービススロットリング動作を実装しました。
Dim stb As New ServiceThrottlingBehavior
stb.MaxConcurrentSessions = 100
stb.MaxConcurrentCalls = 20
stb.MaxConcurrentInstances = 120
serviceHost.Description.Behaviors.Add(stb)
私はそこを読んでこの設定を見つけましたが、今のところ私のコードにはこれがありません:
System.Net.ServicePointManager.DefaultConnectionLimit
私はこれを理解しようとしましたが、完全には理解していません。それで、今私の説明で、ここに私の質問があります:
- サービスまたはクライアント側でSystem.Net.ServicePointManager.DefaultConnectionLimitを設定しますか?
- どこに設定しますか?ServiceHostを開く前に?ServiceHostを作成する前に?
- WCFの接続制限と同時呼び出しについて変更する他の領域はありますか?(私の読書から、使用しているバインディングによっては、いくつかあるようです)
注:回答を投稿する場合は、コードを使用してください。バインディングに構成ファイルを使用せず、プログラムでバインディングを作成します。
ありがとうございました。