在 .Net Core 中,什么替代了 WCF?

140

我习惯使用Class Library(.Net Framework)从零开始创建.Net Framework控制台应用程序,并通过WCF服务公开Add(int x, int y)函数。 然后,我使用控制台应用程序在服务器上代理调用此函数。

但是,如果我使用Console App (.Net Core) 和 Class Library (.Net Core),则System.ServiceModel不可用。 我已经搜索了一些文献,但尚未弄清楚在这种情况下应该使用什么“替代”WCF。

如何在.Net Core中将一个类库中的Add(int x,int y)函数公开给控制台应用程序? 我看到有System.ServiceModel.Web存在,既然这是跨平台的,那我是否需要创建一个RESTful服务呢?


据我所知,是的,您必须创建一个RESTful服务(或者使用一些第三方解决方案,但我不知道任何适用于.NET Core的)。 - Christoph Fink
4
WCF 不太可能移植到 .NET Core,因为大部分的代码都依赖于 Windows 内部库。你可以使用 ASP.NET Core 吗?在那里你将拥有一个方便跨平台的 HTTP 服务器。 - Camilo Terevinto
2
WCF客户端已经得到支持(我不知道有多少),而服务器端则是一个备受争议和投票的功能请求。 - H H
这是一个针对.NET Core的端口: https://github.com/dotnet/wcf - Flupp
7
简而言之:CoreWCF是一个开源项目,可帮助开发人员在.NET Core上构建和运行基于SOAP的服务。 - Ognyan Dimitrov
显示剩余2条评论
14个回答

0

0

如今所有的WCFCore自托管可用性都不是那么容易安装和使用。
对于HostedService来说,最好的选择将是像前面提到的gRPC一样的替代方案,并且请注意,在1年内可能会发生很多变化,当然WCF仅在Core中作为一个良好工作的客户端得到支持。


0

我发现ServiceWire包是NamedPipes和WCF的一个极好替代品,特别是如果您不需要排队请求。


0

正如其他人所提到的,gRPC是一个很好的选择,也是微软目前的推荐。有大量的文档可以直接从微软获取。

然而,如果所有的端点都是.NET应用程序,gRPC可能会过于繁重(不是在运行时,而是在实现上)。我一直在寻找一个真正简单的解决方案,最终自己创建了一个叫做NetMessage的东西。请注意,我是该库的作者(因此我的建议可能有偏见)。

它支持自定义C#类作为通信对象,确保类型安全并强制执行请求/响应合同。这应该可以给出它的工作原理的想法(有关更多详细信息,请参见GitHub上的Readme):

// request packet
public class WeatherRequest : IRequest<WeatherResponse>
{
  public string City { get; set; }
  public DateTime Date { get; set; }
}

// corresponding response packet
public class WeatherResponse
{
  public string Forecast { get; set; }
}

// and this is how to use it (compiler enforces correct types):
var response = await client.SendRequestAsync(new WeatherRequest { City = "Bonn" });
Console.WriteLine(response.Forecast);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接