gpt4 book ai didi

.net - WCF中的回调是如何实现的?

转载 作者:行者123 更新时间:2023-12-02 17:38:17 26 4
gpt4 key购买 nike

进行异步 WCF 服务调用时,服务能够(并且必须)执行收到的回调。这在一般 APM 中是有意义的,但在 WCF 情况下,回调实际上是在客户端执行的,这意味着 essense 中的服务器能够执行客户端代码。

有人可以解释一下这是如何实现的吗?例如,当使用 http 绑定(bind)时,当服务执行回调时,它是否开始发送回一个 http 响应,WCF 客户端将其反序列化为执行回调的消息,并且响应通过返回 End 方法来完成。异步操作?服务可以调用两次回调吗

谢谢!

编辑:只是为了确保它们不会混淆,我不是询问双工合约的回调,而是 AsyncCallback 传递了如下所示的合约(http://msdn.microsoft.com/en-us/library/ms731177.aspx ):

  [OperationContractAttribute(AsyncPattern=true)]
IAsyncResult BeginServiceAsyncMethod(string msg, AsyncCallback callback, object asyncState);

// Note: There is no OperationContractAttribute for the end method.
string EndServiceAsyncMethod(IAsyncResult result);

最佳答案

使用 HTTP 协议(protocol)的回调被实现为复合双工通信 (WS-DualHttpBidning)。这意味着双方在不同的传输连接上互相调用。当客户端调用服务时,它会发送 HTTP 请求。该服务处理请求并存储回调 channel 以供以后使用。然后它返回 HTTP 响应,仅确认发起请求。它不会触发回调。回调是通过调用回调 channel 上的操作从服务触发的。它创建从服务器发送到客户端的 HTTP 请求。客户端执行回调操作并向服务器返回HTTP响应。

此通信流使用双向消息交换模式,但双工通信通常使用单向消息传递。服务器可以根据需要多次调用客户端回调(客户端的性能和不活动超时会影响这一点)。

复合双工通信要求客户端和服务器均可访问(双方的防火墙设置)。在 HTTP 客户端上公开其自己的端点,其行为类似于另一个 Web 服务。相比之下,net.tcp 具有全双工通信 channel ,因此服务器调用和回调 cqll 都在同一 TCP 连接上执行。

编辑:

抱歉,我没听懂你的问题。异步操作 (AsyncPattern) 在服务器上实现 - 该实现对客户端完全透明(由 WCF 服务架构封装)。客户端以通用 HTTP 请求/响应模式进行通信,服务只能为每个请求发送单个响应。

WCF 支持两个级别的异步处理 - 异步调用和异步操作。前者是在客户端实现的,服务端不知道,后者是在服务端实现的,客户端不知道。这些方法经常结合在示例中,这可能会造成困惑。

每种方法都有自己的海豚。异步调用允许非阻塞服务调用,其中客户端可以在服务处理请求时执行其他操作(UI 不会卡住)。异步操作是为了提高频繁使用的服务的可扩展性。同步执行会阻塞 WCF 处理线程,直到执行完成,而异步执行允许将处理线程返回到线程池(以便它可以处理另一个请求),同时操作执行一些耗时的操作 - 通常是 IO 或网络通信。

关于.net - WCF中的回调是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com