有一個將Web服務封裝到第三方API的調用...因此,我們的應用程序可以簡單地調用我的服務,然後我的服務處理所有對API的各種調用。工作得很好。ASP.NET上的SOAP Web服務 - 多重連接 - 靜態值 - XMLRPC API
但是,我們遇到了一個問題,即我們要連接的API允許在給定的一組憑證的任何給定時間最多連接10個連接。
連接最多需要幾秒鐘的時間來處理,但是當我們開始工作時,理論上我們可以有最大限度地滿足這個需求的用戶。所以我們爲這個API創建了多個賬戶(5),爲5個用戶提供了50個連接。
ASP.NET如何處理與Web服務的連接?我知道它異步工作,但它產生了我的類的多個實例或重用相同的類。變量是否會在實例間持續存在(即Will靜態變量是否有效)?
我需要做的是,如果一個API的調用在Client1上失敗,會翻轉到Client2(或Clients [0],Clients [1])等等......可悲的是我無法檢測給定的客戶端在任何特定時刻都沒有連接。我可以用測試呼叫輪詢它,但這需要時間,並且不能保證客戶端在我打電話時有可用的連接。
我打電話給的API是通過XMLRPC代理類(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 2011-06-10 11:08:23
@ pieklk,很抱歉回覆晚了(我離開了車站)。基本上,池化機制通常具有閾值即可能的最大連接。在你的情況下,你的游泳池設計會有點複雜,因爲你想擁有多個憑證以及。因此,您的設計必須查看是否用盡了最大連接閾值。如果沒有,則爲該憑證創建連接。如果是,則轉到下一個憑證。如果你沒有剩下任何東西,那就等到一個可用。接下來的評論繼續... – VinayC 2011-06-16 05:11:05
有點簡單的實現方法將創建一個所有可用插槽的池(沒有證書x沒有最大連接每個憑據)。在請求連接時分配一個插槽,將插槽標記爲「填充」(並創建實際的API客戶端等)。每當您完成連接時,請通知您的連接層,並再次將該插槽標記爲空閒。你可以把這個邏輯關閉/處理你的API客戶端(通過包裝它,或者如果它的部分類然後添加邏輯)。 – VinayC 2011-06-16 05:14:32