Silverlight中的同步调用WCF

我试图拨打电话同步。 但调用的Silverlight应用程序本身锁定时endList方法。 在一个简单的控制台应用程序,我可以做异步同步。 无法看到的问题。

var svc = new WcfServiceClient(); var ar = svc.BeginList(null, null); var result = svc.EndList(ar); <-- Silverlight hangs here listBox.ItemsSource = result;

--------------解决方案-------------

Silverlight不支持同步呼叫。

这是一个关于同步调用web服务和解决方法的文章。

简短的回答:你可以做,如果你是不是在调度线程上,是这样的:

System.Threading.ThreadPool.QueueUserWorkItem(state =>
{
IAsyncResult asyncResult = svc.BeginSomething(null, null);

if (!asyncResult.CompletedSynchronously)
{
asyncResult.AsyncWaitHandle.WaitOne();
}

try
{
svc.EndSomething(asyncResult);
}
catch
{
throw;
}
finally
{
asyncResult.AsyncWaitHandle.Close();
}
});

这样做的最大的好处是,你可以保持您的域模型层同步就像在旧社会,你可以很容易地实现延迟加载等...

但在实践中 ,你只能用它,当你设计你的应用程序要严格遵守MVVM / 指挥模式,在您的ViewModels和命令处理的调度线程和线程模式之间的切换。 这是很多基础工作要做,也有一些陷阱,但是当它的工作原理,它的工作原理奇妙。

如果你想使用准备使用的框架,工作方式类似,它可以在这里找到:CodeProject上:车型引进线程视图线程模式。 该架构很好地解释过该网页上。

分类:WCF 时间:2015-03-15 人气:4
本文关键词: WCF,Silverlight的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.337 (s). 10 q(s)