gpt4 book ai didi

.net - 如何向 .NET 4.5 WCF 服务添加异步支持,以免中断现有客户端?

转载 作者:行者123 更新时间:2023-12-04 23:48:41 24 4
gpt4 key购买 nike

我有一个使用 .NET 4.5 的带有 SOAP 端点的现有 WCF 服务。大多数现有客户端代码都使用 ChannelFactory<T>代理方法。

我想更改服务以支持 async/await各种服务器端 I/O 和数据库操作的模型。

我遇到的问题是添加 async WCF 方法调用的关键字需要将其接口(interface)签名更改为 Task<T> .反过来,这似乎需要更改客户端代码。

在“一直向下”保持服务代码异步的同时,是否有一种简单的方法可以保持公开的 API 不变?

最佳答案

只要您重命名服务器端方法以包含单词 XxxxxAsync它不会更改客户端签名。

WCF 自动为每个方法创建两个端点,一个同步版本和一个异步版本。您可以使用 WCF 测试客户端看到这一点。

例如下面的服务契约(Contract)

[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}

public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}

当您启动 WCF 测试客户端时,您将看到 2 种可用的方法

enter image description here

如果我将代码更改为以下
[ServiceContract]
public interface IService1
{
[OperationContract]
Task<string> GetDataAsync(int value);
}

public class Service1 : IService1
{
public async Task<string> GetDataAsync(int value)
{
await Task.Delay(value);
return string.Format("You entered and awaited: {0}", value);
}
}

我仍然可以调用同步 string GetData(int)我客户的方法

enter image description here

请注意,您将无法再使用相同的接口(interface)客户端和服务器端来表示 API(而且您真的不应该,客户端接口(interface)应该有两个版本。这样客户端可以决定是否要制作阻塞调用与否)。但是,您仍然可以在它们之间使用共享模型。

关于.net - 如何向 .NET 4.5 WCF 服务添加异步支持,以免中断现有客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27882501/

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