1

本文第一部分所述(.chm 文件 - 请参阅下面的注释)

单向调用不等同于异步调用。当单向调用到达服务时,它们可能不会一次全部调度,并且可能会在服务端排队等待一次调度......如果排队的消息数量超过了队列的容量,那么即使发出单向呼叫,客户端也会阻塞。

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

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


注意:以上引用摘自 Juval Lowy 的一篇名为WCF Essentials - What You Need To Know About One-Way Calls, Callbacks, and Events的文章,可以在 2006 年 10 月号的 MSDN 杂志中找到。上面的链接指向 MSDN 上的帮助文件 (.chm) 格式。如果你不能让链接的 CHM 文件工作(我不能)你可以用 7zip 打开它。

4

1 回答 1

4

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

对于 OneWay 调用:一旦服务调用被分派或排队,调用者将继续执行。基本上只要服务成功接到电话。

我如何确定该方法是在服务上执行的?

如果客户端没有收到异常,则服务调用已经(或将要)执行。当服务调用实际运行或者它是否成功或抛出异常对于客户端来说是未知的。

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

这根本不符合逻辑。Fire-and-forget 的定义是忘记结果。它不会客户端返回任何值或错误。然而,异步调用不是一劳永逸的,并且会返回错误。

于 2012-08-24T17:15:16.183 回答