【问题标题】:WCF calls from silverlight being executed sequentially rather than in parallel来自 silverlight 的 WCF 调用按顺序而不是并行执行
【发布时间】:2012-03-18 03:59:15
【问题描述】:

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

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

还有人有任何资源/链接来了解 silverlight / wcf 线程模型的工作原理。我有兴趣知道 proxymethodAsync 调用是否正在生成一个新线程?如果不是,它如何在不阻塞 UI 线程的情况下工作?

【问题讨论】:

  • 需要查看保存更改的代码。

标签: wcf silverlight entity-framework


【解决方案1】:

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

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

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

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

【讨论】:

  • hmmm..但问题是我的服务器正在处理它们,而不是并行运行它们。
  • 如果你使用像 Fiddler(或 Firefox 中的 Firebug)这样的工具,你就会明白我的意思——浏览器一次只运行两个到每个主机的连接。一旦浏览器收到响应,它将发送另一个请求。
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
相关资源
最近更新 更多