WCF RIA服务在单线程上等待?

时间:2011-03-17 10:56:51

标签: multithreading silverlight wcf-ria-services

有人可以解释一下为什么会这样吗?

  1. 使用WCF Ria服务的Silverlight 4应用程序
  2. SL应用调用StartLongOperation [Invoke]操作 由于外部组件的同步问题,服务器端代码中存在Thread.Sleep(30 * 1000)

  3. SL app调用GetStatus(标准查询)操作。 这些调用似乎在服务器端被阻止,正在等待StartLongOperation完成。为什么?

  4. 我假设服务器端,StartLongOperation运行一个工作线程,每次调用GetStatus都会在一个单独的工作线程上运行。客户端的调用是异步的,因此SL会触发StartLongOperation,然后继续轮询GetStatus。但GetStatusCompletedStartLongOperation完成后才会被解雇。

1 个答案:

答案 0 :(得分:1)

由于所有Silverlight网络通信都在UI线程上进行,因此一次只能进行一次WCF调用。这意味着您的StartLongOperation必须完成,然后客户端将启动GetStatus调用。如果要测试此行为,请启动Fiddler。您会发现Silverlight不会向GetStatus方法发送HTTP请求,直到它首次从服务器获取StartLongOperation响应。

所以问题不在于服务器端。这是Silverlight的限制。