2011-06-09 23 views
0

ので我々のアプリケーションは、単に私のサービスとその後、私のサービスは、すべてのハンドルを呼び出すことができます...サードパーティの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(経由で電話をかけるまで、単に「一緒に乗る」)、その後、接続が行われたことをこのことかららしいです。

答えて

1

あなたはそれが要求ごとにWebサービスクラスの新しいインスタンスを起動でしょうASP.NET Webサービス(ASMX)を使用している場合。 WCFベースのWebサービスの場合、属性/ configuartion(このarticleを参照)を使用してインスタンス化/同時実行性を制御できます。呼び出しごと、セッションごと、およびシングルトンごとに3つのインスタンス化モードが可能です。

にかかわらず、使用しているものの、あなたは常にあなたのAPI接続をプールするために、独自のプーリングメカニズムを実装することができます。 APIクライアントを取得するためのファクトリメソッドはすでにあります。メソッド内のプール層にコールを入れるだけです。

+0

しかし、既に別のクライアントと接続/資格情報が必要かどうかをどのように判断できますか? – klkitchens

+1

@pieklk、遅く応答して申し訳ありません(私は駅から出ていた)。本質的に、プールメカニズムは、一般に、閾値、すなわち最大接続が可能である。あなたのケースでは、プールデザインは少し複雑になるでしょう。だからあなたのデザインは、信用証明書のための最大接続しきい値が使い果たされているかどうかを見なければなりません。そうでない場合は、その信任状の接続を作成します。はいの場合は、次の認証情報に移動します。あなたが左を持っていない場合は、利用可能になるまで待ってください。次のコメントに続きます... – VinayC

+1

少し簡単にアプローチを実装する方法は、利用可能なすべてのスロットのプールを作成することです(資格情報なし、資格ごとの最大接続数なし)。接続が要求されたときにスロットを割り当て、スロットを「塗りつぶし」としてマークします(実際のAPIクライアントなどを作成します)。接続が完了したら、プール層に通知し、スロットを再び空きとしてマークします。このロジックをAPIクライアントのクローズ/ディスプロースに置くことができます(ラップするか、部分クラスでロジックを追加することによって)。 – VinayC

-1

通常、Windows XPとWindows 7の同時TCP/IP接続は10個に制限されています。多分それはそれです。 Windowsサーバーのバージョンで作業してください。

+1

-1:OPによると、「接続しているAPIは、指定された資格情報で常に最大10の接続を許可します。」 –