Silverlight中的Aynchronous web服务器调用和最大HTTP连接数

Silverlight中的Aynchronous web服务器调用和最大HTTP连接数,silverlight,multithreading,http,browser,Silverlight,Multithreading,Http,Browser,我已经读到Silverlight 2.0在与web服务器通信时通过设计一个异步模型来实现。我还没有机会尝试Silverlight,但我假设它使用一个线程池来管理线程,就像在.NET Framework中一样。 现在,由于一些浏览器,尤其是Internet Explorer,有一个硬编码限制,即web服务器上最多可以进行两个并发HTTP连接,如果我从Silverlight发出一系列异步请求,会发生什么情况? Silverlight是否在web浏览器中绕过此限制并打开尽可能多的HTTP连接(如果有线

我已经读到Silverlight 2.0在与web服务器通信时通过设计一个异步模型来实现。我还没有机会尝试Silverlight,但我假设它使用一个线程池来管理线程,就像在.NET Framework中一样。

现在,由于一些浏览器,尤其是Internet Explorer,有一个硬编码限制,即web服务器上最多可以进行两个并发HTTP连接,如果我从Silverlight发出一系列异步请求,会发生什么情况?


Silverlight是否在web浏览器中绕过此限制并打开尽可能多的HTTP连接(如果有线程可用),还是异步请求排队等待两个连接中的一个可用?

我猜,作为.NET应用程序Silverlight 2有一个独立于浏览器的限制。

我假设它是Machine.config中的maxconnection属性,如

中所述。首先,Machine.config文件不会被使用,因为Silverlight控件使用其自己版本的CoreCLR沙盒

我相信Silverlight控件实际上利用底层浏览器来进行异步HTTP请求。考虑到Silverlight控件无法访问SOAP故障信息,因为SOAP规范要求服务器返回HTTP 500响应代码,而Silverlight控件无法从承载该控件的浏览器获取该代码,这种情况最有可能发生

这篇文章证实了这一点

至于并发HTTP连接的限制,我相信IE5和更高版本会根据HTTP协议版本(HTTP/1.0)限制到同一站点的连接数,它限制为4个连接,HTTP/1.1限制为3个连接。大多数情况下,web服务器会将每个客户端的连接数限制为2个,排队或丢弃剩余的连接。

在IE(尚未测试其他客户端)中,Silverlight一次限制为2个连接

Silverlight中的行为就是不发出请求。因此,如果连续发出5个异步web服务请求,前两个将发生,其他三个不会发生。我看到没有异常被抛出


Fiddler在这里是一个很大的帮助:)

除了IE之外,Firefox还被限制为两个连接

请注意,限制是每个主机名


如果向主机文件添加条目,或使用dns别名,则可以获得更多连接。例如,在测试中,将类似“127.0.0.1 test1”的行添加到主机文件,然后可以打开两个到的连接和两个以上的连接,以便为客户端创建消息管理器界面。任何传出请求都会发布到该管理器处理的队列中。它将串行处理排队消息(即,当调用发送到服务器的最后一条消息的回调时,可以安全地继续处理下一条排队消息)

您可以通过保持Comet连接对服务器开放来使用其他连接资源。服务器将通过此Comet连接将任何返回消息推送到客户端。您需要用一个唯一的数字来标记即将发送的消息,该数字可以作为属性嵌入到即将发送的消息中,以便将结果与请求关联起来。消息管理器将向相应的处理程序发送结果消息

实际上,您最终使用两个连接资源来建立双向消息传递。但是对于客户端上请求者的数量没有人为的限制(尽管请求将被串行传输到服务器)。不过,发送的动作总是很快的,因为您不需要等待任何结果被计算出来——您只需要将消息可靠地传递到服务器并返回。结果在另一个Comet连接上异步返回

我们将Flex客户端应用程序与运行在Tomcat web服务器上的Adobe BlazeDS结合起来,按照以下思路开展工作:


IE和silverlight的版本是什么?silverlight 4中肯定不是这样,它会对它们进行排队(但一次只能有2个)。选择ClientHttp和BrowserHttp时的行为是否相同?关闭。旧浏览器限制为4个HTTP/1.0和2个HTTP/1.1。