有人可以解释一下为什么会这样吗?
SL应用调用StartLongOperation
[Invoke]
操作
由于外部组件的同步问题,服务器端代码中存在Thread.Sleep(30 * 1000)
。
SL app调用GetStatus
(标准查询)操作。
这些调用似乎在服务器端被阻止,正在等待StartLongOperation
完成。为什么?
我假设服务器端,StartLongOperation
运行一个工作线程,每次调用GetStatus
都会在一个单独的工作线程上运行。客户端的调用是异步的,因此SL会触发StartLongOperation
,然后继续轮询GetStatus
。但GetStatusCompleted
在StartLongOperation
完成后才会被解雇。
答案 0 :(得分:1)
由于所有Silverlight网络通信都在UI线程上进行,因此一次只能进行一次WCF调用。这意味着您的StartLongOperation必须完成,然后客户端将启动GetStatus调用。如果要测试此行为,请启动Fiddler。您会发现Silverlight不会向GetStatus方法发送HTTP请求,直到它首次从服务器获取StartLongOperation响应。
所以问题不在于服务器端。这是Silverlight的限制。