2012-03-18 45 views
1

我正在使用Silverlight 5.0和WCF 4.0以及实体框架4.0。我的设计如下 - Silverlight客户端通过普通的同步方法调用来调用服务代理(这只是对正在进行的WCF服务的封装)。服务代理inturn调用WCF服务,该服务使用二进制编码和httptransport进行自定义绑定。这个WCF服务在Silverlight的同一个应用程序中被提出,并且来自服务代理的调用正在通过“操作名称”异步方法进行。服务代理具有自定义事件,当“操作”完成方法被调用时将被触发。此服务代理事件将由silverlight处理。此WCF服务再次使用“操作名称”异步方法调用分布式WCF服务。Silverlight正在按顺序执行而不是并行执行WCF调用

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

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

+0

需要查看保存更改的代码。 – BentOnCoding 2012-03-18 05:00:10

回答

4

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

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

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

所以,如果你需要打很多电话,你应该把这些打包起来,并把它们作为一批发送到服务器。

+0

嗯..但问题是我的服务器正在处理它们ony一个,而不是在parellel中运行它们。 – 2012-03-18 17:14:30

+1

如果你使用像Fiddler这样的工具(或Firefox中的Firebug),你会明白我的意思 - 浏览器一次只能向每个主机运行两个连接。一旦浏览器收到响应,它会发送另一个请求。 – 2012-03-19 01:21:26