ので我々のアプリケーションは、単に私のサービスとその後、私のサービスは、すべてのハンドルを呼び出すことができます...サードパーティのAPIへの呼び出しをカプセル化するSOAP Webサービスを持っていますAPIへのさまざまな呼び出し。うまく動作します。SOAP Webサービス - 複数の接続 - 静的な値 - XMLRPC APIは
しかし、我々は我々が接続しているAPIは、資格情報の特定のセットのための任意の時点で10台の接続の最大を可能にするという問題がヒットしました。せいぜい
接続がプロセスに数秒かかるが、私たちが生きて行くとき、私たちは、理論的には最大、このうちのユーザーを持つことができます。 APIに複数のアカウント(5)を作成して、5人のユーザーに50の接続を提供しました。
ASP.NETはどのようにWebサービスへの接続を処理しますか?私はそれが非同期に動作することを知っていますが、それは私のクラスの複数のインスタンスを生成するか、同じクラスを再利用しますか?変数が複数のインスタンス間で持続するかどうか(つまり、静的変数が機能するかどうか)
私がする必要があるのは、Client1、Client2(またはClients [0]、Clients [1])などへのロールオーバーに失敗した場合です。悲しいことに、特定のクライアント任意の瞬間に接続から外れています。私はテストコールでそれをポーリングすることができますが、それは時間がかかり、私がコールするときにクライアントが接続を利用できるという保証はありません。
私が呼んでいるAPIは、XMLRPC Proxyクラス(CookComputing)を介してです。クライアントが作成されたとき、またはコールが行われたときにクレデンシャルに沿って渡された「接続」ですか?
public static IVoicestar GetClient(string userID, string password)
{
IVoicestar client = XmlRpcProxyGen.Create<IVoicestar>();
client.Credentials = new NetworkCredential(userID, password);
return client;
}
資格情報は、私がClient.MethodCall(経由で電話をかけるまで、単に「一緒に乗る」)、その後、接続が行われたことをこのことかららしいです。
しかし、既に別のクライアントと接続/資格情報が必要かどうかをどのように判断できますか? – klkitchens
@pieklk、遅く応答して申し訳ありません(私は駅から出ていた)。本質的に、プールメカニズムは、一般に、閾値、すなわち最大接続が可能である。あなたのケースでは、プールデザインは少し複雑になるでしょう。だからあなたのデザインは、信用証明書のための最大接続しきい値が使い果たされているかどうかを見なければなりません。そうでない場合は、その信任状の接続を作成します。はいの場合は、次の認証情報に移動します。あなたが左を持っていない場合は、利用可能になるまで待ってください。次のコメントに続きます... – VinayC
少し簡単にアプローチを実装する方法は、利用可能なすべてのスロットのプールを作成することです(資格情報なし、資格ごとの最大接続数なし)。接続が要求されたときにスロットを割り当て、スロットを「塗りつぶし」としてマークします(実際のAPIクライアントなどを作成します)。接続が完了したら、プール層に通知し、スロットを再び空きとしてマークします。このロジックをAPIクライアントのクローズ/ディスプロースに置くことができます(ラップするか、部分クラスでロジックを追加することによって)。 – VinayC