温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

WCF回调返回值实例分析

发布时间:2021-12-15 09:01:25 来源:亿速云 阅读:146 作者:iii 栏目:编程语言

这篇文章主要介绍“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回调返回值实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

wcf
AI