gpt4 book ai didi

c# - 具有 'normal' 接口(interface)的 WCF 异步实现

转载 作者:太空狗 更新时间:2023-10-30 00:31:51 24 4
gpt4 key购买 nike

我读过的每篇关于为 WCF 服务执行异步实现的文章都需要修改 WCF 服务的接口(interface)(例如,操作的返回类型从 T 变为 Task)。但是,我不想修改操作签名,因为我的客户端代码对 Task<> 类型一无所知。我只希望实现是同步的。

我可以通过调用内部异步实现方法然后执行 await 的“包装器”方法来实现现有的同步入口点,但这会阻止调用包装器的线程,从而达不到目的有一个异步实现(这是为了释放这些线程,以便它们可以服务于其他请求)。

所以,我需要 WCF 知道实现是异步的,但也知道接口(interface)不是。

最佳答案

服务端的“异步”不影响客户端的“异步”。例如,在我正在处理的项目中,服务器上有以下内容

[ServiceContract(Namespace = "http://example.com/Example/v1", ProtectionLevel = ProtectionLevel.EncryptAndSign)]
public interface IClientsUploader
{
[OperationContract()]
Task<Results> UploadClientsAsync(Database database, Client[] clients);
}

但在客户端我有契约(Contract)

[System.ServiceModel.ServiceContractAttribute(Namespace="http://example.com/Example/v1", ConfigurationName="Example.IClientsUploader")]
public interface IClientsUploader
{
[System.ServiceModel.OperationContractAttribute(Action="http://example.com/Example/v1/IClientsUploader/UploadClients", ReplyAction="http://example.com/Example/v1/IClientUploader/UploadClientsResponse")]
Example.DataStructures.Results UploadClients(Example.DataStructures.Database database, System.Collections.Generic.IEnumerable<Example.DataStructures.Client> clients);
}

而且它工作得很好。 WCF 注意到 Task XxxxAsync模式并将其转换为没有 Task<T> 的端点返回类型和 Async后缀。但是,当操作进入时,可以使用 await 之类的东西来处理操作。里面。

关于c# - 具有 'normal' 接口(interface)的 WCF 异步实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886400/

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