有一个将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