在SilverLight中同步调用调用wcf服务
2010-07-19 15:34
357 查看
这几天使用SilverLight调用ironpython遇到了一些问题,后来在codeplex网站上找到了解决方案
是这样的,在Silverlight脚本系统中调用的脚本有些使用到了wcf,而脚本之间调用在数据上是有先后依赖关系的,比如:
def doSomething:
obj1 = context.Load("From Obj1") #context是C#注册到ironpython中的对象,Load使用了wcf服务下载服务端数据
#加载obj2
obj2 = context.Load("From Obj2 Where Obj2.RefID="+obj1.ID)
问题出现在这里了,由于Silverlight调用wcf是异步调用,所以从效果上来说,加载obj2的语句不会等到obj1加载完成就会执行,如此导致加载obj2的失败
后来在http://www.codeproject.com/KB/silverlight/SynchronousSilverlight.aspx找到了解决办法
利用后台线程来同步返回,关键是使用ManualEvent的信号量,并且不允许在UI线程当中使用
例如:
void Load()
{
System.Threading.ThreadPool.QueueUserWorkItem(delegate
{
ManualResetEvent manualEvent = new ManualResetEvent(false);
AccessWCFService(manualEvent);
manualEvent.WaitOne(20000);//等待20秒
})
}
string AccessWCFService(ManualResetEvent manualEvent )
{
..... 使用链接地址所用方式,同步方式访问wcf服务
manualEvent.set();
}
这个可以保证多个wcf服务在非UI线程顺序访问,不过问题来了,在IronPython写上述doSomething的时候,是一次加载一次运行的,这样导致第二句Script在第一句返回的时候就执行了,不知道有没有人遇到这个问题并解决了?
是这样的,在Silverlight脚本系统中调用的脚本有些使用到了wcf,而脚本之间调用在数据上是有先后依赖关系的,比如:
def doSomething:
obj1 = context.Load("From Obj1") #context是C#注册到ironpython中的对象,Load使用了wcf服务下载服务端数据
#加载obj2
obj2 = context.Load("From Obj2 Where Obj2.RefID="+obj1.ID)
问题出现在这里了,由于Silverlight调用wcf是异步调用,所以从效果上来说,加载obj2的语句不会等到obj1加载完成就会执行,如此导致加载obj2的失败
后来在http://www.codeproject.com/KB/silverlight/SynchronousSilverlight.aspx找到了解决办法
利用后台线程来同步返回,关键是使用ManualEvent的信号量,并且不允许在UI线程当中使用
例如:
void Load()
{
System.Threading.ThreadPool.QueueUserWorkItem(delegate
{
ManualResetEvent manualEvent = new ManualResetEvent(false);
AccessWCFService(manualEvent);
manualEvent.WaitOne(20000);//等待20秒
})
}
string AccessWCFService(ManualResetEvent manualEvent )
{
..... 使用链接地址所用方式,同步方式访问wcf服务
manualEvent.set();
}
这个可以保证多个wcf服务在非UI线程顺序访问,不过问题来了,在IronPython写上述doSomething的时候,是一次加载一次运行的,这样导致第二句Script在第一句返回的时候就执行了,不知道有没有人遇到这个问题并解决了?
相关文章推荐
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务(转)
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchro“.NET研究”nous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务(转)
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务