我已经读过Silverlight 2.0在与Web服务器通信时通过设计强加了异步模型。我没有机会尝试使用Silverlight,但我认为它使用线程池来管理.NET Framework中的线程。
现在,由于某些浏览器(尤其是Internet Explorer)具有可在Web服务器上进行的最多两个并发HTTP连接的硬编码限制,如果我从Silverlight发出一堆异步请求会发生什么?登记/>
Silverlight是否在Web浏览器中绕过此限制并打开与可用线程一样多的HTTP连接,或者异步请求是否排队并等待两个连接中的一个变为可用?
答案 0 :(得分:3)
在IE中(尚未测试其他人)Silverlight一次限制为2个连接。
Silverlight中的行为是简单地不发出请求。因此,如果您连续发出5个异步Web服务请求,则前2个将发生,其他3个不会发生。我见过没有例外......
Fiddler在这里是一个很大的帮助:)
答案 1 :(得分:2)
为您的客户创建消息管理器界面。任何传出请求都会发布到此管理器处理的队列中。它将串行处理排队的消息(即,当调用发送到服务器的最后一条消息的回调时,可以安全地继续处理下一个排队的消息。)
您可以通过保持Comet连接对服务器开放来使用其他连接资源。服务器会通过此Comet连接将任何返回消息推送到客户端。您需要使用唯一编号标记外出消息,该编号可以作为属性嵌入到即将发送的消息中 - 以便结果可以与请求相关联。消息传递管理器会将结果消息分派给该结果的相应处理程序。
基本上,您最终使用两个连接资源来建立双向消息传递。但是客户端上的请求者数量没有人为限制(尽管请求将串行传输到服务器)。但是,发送的行为总是很快,因为您不等待计算任何结果 - 您只需要将消息可靠地传递给服务器并返回。结果在另一个Comet连接上异步返回。
我们的Flex客户端应用程序与我们的Tomcat Web服务器中运行的Adobe BlazeDS一起执行以下操作:
答案 2 :(得分:1)
请注意,限制是每个主机名。
如果您向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,排队或丢弃其余部分。