异步Web服务器调用Silverlight和最大HTTP连接

时间:2008-10-23 08:53:48

标签: silverlight multithreading http browser

我已经读过Silverlight 2.0在与Web服务器通信时通过设计强加了异步模型。我没有机会尝试使用Silverlight,但我认为它使用线程池来管理.NET Framework中的线程。

现在,由于某些浏览器(尤其是Internet Explorer)具有可在Web服务器上进行的最多两个并发HTTP连接的硬编码限制,如果我从Silverlight发出一堆异步请求会发生什么?登记/> Silverlight是否在Web浏览器中绕过此限制并打开与可用线程一样多的HTTP连接,或者异步请求是否排队并等待两个连接中的一个变为可用?

5 个答案:

答案 0 :(得分:3)

在IE中(尚未测试其他人)Silverlight一次限制为2个连接。

Silverlight中的行为是简单地不发出请求。因此,如果您连续发出5个异步Web服务请求,则前2个将发生,其他3个不会发生。我见过没有例外......

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

答案 1 :(得分:2)

为您的客户创建消息管理器界面。任何传出请求都会发布到此管理器处理的队列中。它将串行处理排队的消息(即,当调用发送到服务器的最后一条消息的回调时,可以安全地继续处理下一个排队的消息。)

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

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

我们的Flex客户端应用程序与我们的Tomcat Web服务器中运行的Adobe BlazeDS一起执行以下操作:

A Flex-based asynchronous stack

答案 2 :(得分:1)

除了IE之外,Firefox还仅限于两个连接。

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

如果您向hosts文件添加条目,或使用dns别名,则可以获得更多连接。例如,在测试中,将“127.0.0.1 test1”等行添加到您的hosts文件中,然后您可以打开两个连接到http://localhost,再打开两个连接到http://test1

答案 3 :(得分:0)

我想,作为.NET应用程序,Silverlight 2具有独立于浏览器的限制 我假设它是 Machine.config 中的 maxconnection 属性,如http://support.microsoft.com/kb/828219

中所述

答案 4 :(得分:-2)

首先不会使用Machine.config文件,因为Silverlight控件使用自己的CoreCLR版本进行沙盒化。

我相信Silverlight控件实际上利用底层浏览器来发出异步HTTP请求。考虑到Silverlight控件如何无法访问SOAP错误信息,因此很可能是这种情况,因为SOAP规范要求服务器返回HTTP 500响应代码,并且Silverlight控件不会从托管控件的浏览器获取该代码。

这篇文章here用于确认这一点。

关于并发HTTP连接的限制,我认为IE5及更高版本基于HTTP协议版本限制了到同一站点的连接数 - HTTP / 1.0它限制为4个连接和HTTP / 1.1到3个连接。大多数情况下,Web服务器将每个客户端的连接数限制为2,排​​队或丢弃其余部分。