详细介绍WCF回调返回值说明

开发 后端
为每一个软件行业的从业人员,无论是开发人员、项目经理、还是测试人员,也要不断适应这个趋势,我认为WCF回调只会使我们的工作更简单和更轻松。

客户端实现WCF回调时,如果回调函数有返回值,那么该返回值类型只能为基本类型,不能为接口类型,否则服务在回调时系统无响应,***超时,不报任何错误。所以大家有communitysever的可以从里面获得然后反编译为自己所用,没有的就到网络上搜下吧,有许多资源呢!

由于WCF回调方法并非运行在主线程中,如果WCF回调方法需要更新与异步调用结果相关的界面,例如本例中的lbMessage控件,则需要将回调的调用封送(Marshal)到当前主程序界面的同步上下文中。我们可以使用 SynchronizationContext以及它的SendOrPostCallback委托,对调用进行封送:#t#

利用异步方式执行服务操作,使得服务在执行过程中不会阻塞主线程,当方法执行完成后,通过AsyncCallback回调对应的方法,可以通知客户端服务执行完毕。例如:

  1. //Invoke it Asynchronously     
  2. m_service.BeginTransferDocument(m_doc,OnTransferCompleted,null);     
  3. //Do some work;     
  4. //callback method     
  5. void OnTransferCompleted(IAsyncResult result)     
  6. {     
  7. Stream stream = m_service.EndTransferDocument(result);     
  8. result.AsyncWaitHandle.Close();     
  9. lbMessage.Text = string.Format("The file {0} had been transfered sucessfully.",     
  10. m_doc.FileName);     
  11. }  

在调用BeginTransferDocument()方法之后,主线程不会被阻塞,仍然可以继续执行其它工作。而当服务方法执行完毕之后,会自动调用WCF回调方法,执行方法中的内容。上述实现存在一个问题,就是对于lbMessage控件的操作。由于WCF回调方法并非运行在主线程中,如果回调方法需要更新与异步调用结果相关的界面,例如本例中的lbMessage控件,则需要将回调的调用封送(Marshal)到当前主程序界面的同步上下文中。我们可以使用 SynchronizationContext以及它的SendOrPostCallback委托,对调用进行封送:

  1. public ExplorerClientForm()  {  InitializeComponent();  m_synchronizationContext = SynchronizationContext.Current;  } 
  2.  private SynchronizationContext m_synchronizationContext;  }
责任编辑:chenqingxiang 来源: 机械工业出版社
相关推荐

2009-12-07 11:11:41

WCF返回值

2009-12-08 16:09:02

WCF消息

2010-03-02 16:50:34

WCF返回值

2009-12-25 17:21:13

ADO返回值

2009-12-22 19:00:08

WCF回调

2009-11-09 17:30:20

WCF元数据

2009-12-22 15:02:40

WCF限流

2009-12-08 09:00:14

WCF线程

2009-12-07 18:06:46

WCF框架

2009-12-08 17:34:25

WCF的配置

2009-11-09 15:58:07

WCF回调方法

2010-03-02 10:54:42

WCF回调操作

2009-11-09 13:47:22

WCF Stream操

2010-03-01 15:12:53

WCF回调契约

2009-11-06 16:13:45

WCF回调

2010-02-22 16:16:14

Python语法

2021-08-13 11:31:23

HTTP

2010-07-21 10:32:05

Perl函数返回值

2009-08-12 10:11:18

C# 回调函数

2010-07-09 13:20:37

HART协议
点赞
收藏

51CTO技术栈公众号