十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“WCF回调返回值实例分析”,在日常操作中,相信很多人在WCF回调返回值实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”WCF回调返回值实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
新乐网站建设公司创新互联,新乐网站设计制作,有大型网站制作公司丰富经验。已为新乐上千多家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的新乐做网站的公司定做!
客户端实现WCF回调时,如果回调函数有返回值,那么该返回值类型只能为基本类型,不能为接口类型,否则服务在回调时系统无响应,***超时,不报任何错误。
由于WCF回调方法并非运行在主线程中,如果WCF回调方法需要更新与异步调用结果相关的界面,例如本例中的lbMessage控件,则需要将回调的调用封送(Marshal)到当前主程序界面的同步上下文中。我们可以使用 SynchronizationContext以及它的SendOrPostCallback委托,对调用进行封送:
利用异步方式执行服务操作,使得服务在执行过程中不会阻塞主线程,当方法执行完成后,通过AsyncCallback回调对应的方法,可以通知客户端服务执行完毕。例如:
//Invoke it Asynchronously m_service.BeginTransferDocument(m_doc,OnTransferCompleted,null); //Do some work; //callback method void OnTransferCompleted(IAsyncResult result) { Stream stream = m_service.EndTransferDocument(result); result.AsyncWaitHandle.Close(); lbMessage.Text = string.Format("The file {0} had been transfered sucessfully.", m_doc.FileName); }
在调用BeginTransferDocument()方法之后,主线程不会被阻塞,仍然可以继续执行其它工作。而当服务方法执行完毕之后,会自动调用WCF回调方法,执行方法中的内容。上述实现存在一个问题,就是对于lbMessage控件的操作。由于WCF回调方法并非运行在主线程中,如果回调方法需要更新与异步调用结果相关的界面,例如本例中的lbMessage控件,则需要将回调的调用封送(Marshal)到当前主程序界面的同步上下文中。我们可以使用 SynchronizationContext以及它的SendOrPostCallback委托,对调用进行封送:
public ExplorerClientForm() { InitializeComponent(); m_synchronizationContext = SynchronizationContext.Current; } private SynchronizationContext m_synchronizationContext; }
到此,关于“WCF回调返回值实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!