单向操作与异步调用

时间:2012-08-24 16:06:22

标签: c# .net wcf

first section of this article(。chm文件 - 请参阅下面的说明)

中所述
  

单向调用不等同于异步调用。单向通话时   到达服务,他们可能不会立即发送,也可能是   在服务方面排队等待一次一个...如果   排队的消息数超过了队列的容量,然后是   客户端即使在发出单向呼叫时也会阻止。

如果调用单向调用,它何时将控制权返回给调用者?同一篇文章的介绍指出单向调用用于用于“即发即弃”操作,从而模拟一种异步调用。 如果会话WCF服务具有启动会话的Login()单向方法,此方法何时将控制权返回给调用者?在方法实际执行服务之前它是否返回?如果是这样,我怎么能确定该方法是在服务上执行的?

如果我希望服务返回到客户端登录过程中可能发生的错误,那么异步调用是实现“即发即弃”行为的唯一方法吗?


注意:上面引用的文章摘自Juval Lowy撰写的一篇名为 WCF Essentials - 你需要了解的单向调用,回调和事件的文章,可以在10月份找到2006年出版的MSDN杂志。上面的链接是MSDN上的帮助文件(.chm)格式。如果您无法使链接的CHM文件生效(我不能),您可以使用7zip打开它。

1 个答案:

答案 0 :(得分:4)

  

如果会话WCF服务具有启动的Login单向方法   会话,此方法何时将控制权返回给调用者?

对于OneWay呼叫:一旦调度或排队服务呼叫,呼叫者将继续执行。基本上,只要服务成功接听电话。

  

我怎样才能确定该方法是在服务上执行的?

如果客户端没有获得异常,则执行(或将要执行)服务调用。当服务调用实际运行或者是否成功或抛出异常时,客户端都不知道。

  

如果我希望服务返回给客户端可能的错误   在登录过程中发生的是异步调用   实现“一劳永逸”行为的唯一方法是什么?

这没有意义。根据定义,“一劳永逸”意味着忘记结果。 会向客户端返回任何值或错误。但是,异步调用不会发送,并且会返回错误。