gpt4 book ai didi

wcf - 异步WCF

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

我正在尝试创建支持异步调用的 WCF 服务。我遵循了我能找到的所有示例和教程,它们都具有一种同步方法的惯用模式,以及异步开始和结束,例如:

[OperationContract(AsyncPattern = false)]
string GetData(int value);

[OperationContract(AsyncPattern = true)]
IAsyncResult BeginGetData(int value, AsyncCallback callback, object asyncState);

string EndGetData(IAsyncResult result);

但是,无论我在客户端做什么,都只会调用同步 GetData。 Fiddler 告诉我消息总是相同的:

 <s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetData
xmlns="http://tempuri.org/"><value>0</value></GetData></s:Body></s:Envelope>

当我删除同步 GetData 接口(interface)时,现在可以正确调用异步方法。

这是正常行为吗?我还应该做些什么来支持方法的同步和异步版本吗?

最佳答案

这是一个常见的误解。您假设您需要使服务器异步,以便客户端能够进行异步调用。这不是真的。服务器和客户端100%独立。它们由二进制线路协议(protocol)分隔。

您在 Fiddler 中看到的消息始终相同,因为 SOAP 不知道有关同步或异步的任何信息。在 SOAP 级别,您的决定不会自行显现。因此,客户端也无法观察您的服务器端决策。

这意味着您可以使服务器同步,但仍然有一个真正的异步客户端,反之亦然。

无论如何,您应该只在服务器上实现一个模式:同步或异步。从来没有两者兼而有之。摆脱你的实现之一。从功能的角度来看,留下哪一个并不重要。

我从此处的评论中提取了重要信息:

It is hard to fit an explanation about when to use server-side asyncinto this comment box. In short, don't use it on the server bydefault. Use it if special circumstances make it attractive ornecessary.

On a meta-level let me point out that async IO has becomea fad that should not be followed lightly. The community is in a veryunfortunate state of misinformation about this right now.

关于wcf - 异步WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108876/

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