来自silverlight的WCF调用是按顺序而不是并行执行的

时间:2012-03-18 03:59:15

标签: wcf silverlight entity-framework

我正在使用Silverlight 5.0和WCF 4.0以及实体框架4.0。我的设计如下 - Silverlight客户端通过正常的同步方法调用调用服务代理(这只是进程中WCF服务的包装)。服务代理程序inturn调用WCF服务,该服务配置有带二进制编码和httptransport的自定义绑定。此WCF服务在与Silverlight相同的应用程序中进行,并且来自服务代理的调用是通过“operationame”异步方法进行的。服务代理具有将在调用“operation”Completed方法时触发的自定义事件。此服务代理事件将由silverlight处理。此WCF服务再次使用“operationame”异步方法调用分布式WCF服务。

我的silverlight应用程序在屏幕上有四个不同的小部件,它们对服务代理进行四次调用。来自服务代理的四个调用与进程中的WCF服务并行触发。但是,从进程中的WCF服务,调用将按顺序进行到ditributed wcf服务。我刚刚用fiddler检查过,这表明在进程中wcf正在对ditributed wcf服务进行顺序调用。我想和平相处。有人可以帮忙吗问题是我的服务器正在处理它们,而不是并行运行它们。我通过提琴手证实了这一点,我看到这些电话是按顺序到达WCF的。 WCF分布式服务配置为具有concurrencymode single和webhttpbinding的percall。

也有人有任何资源/链接来了解silverlight / wcf线程模型的工作原理。我有兴趣知道proxymethodAsync调用是否会产生一个新线程?如果没有阻止UI线程,它是如何工作的?

1 个答案:

答案 0 :(得分:4)

HTTP调用(我猜你正在调用你的WCF调用)不是异步的。

您的代码发出异步调用 - 但Silverlight运行时(或浏览器)会同步处理该连接。只有在返回时它才会发出回调代码。

一次可以进行的连接数量也存在限制 - 这是浏览器和/或运行时限制。通常,限制是两个活动连接。

因此,如果您需要进行多次调用,则应将其包装起来,并将它们作为批处理发送到服务器。