Fork me on GitHub

CoreWCF 1.0.0 发布,微软正式支持WCF

2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本。对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束。Matt Connew 用3 周的时间来构建一个基于 .NET Core 的 WCF 服务实现的POC 基本原型。在3周结束时,Matt Connew 有了一个可以工作的玩具,可以使用BasicHttpBinding托管服务。然后,Matt Connew 的原型作为概念证明坐在那里收集灰尘,同时决定如何处理它。.NET团队在2019年的Build 大会上 已经决定了不在继续在.NET Core中支持WCF,这也是微软官宣的事情,我想大家都记忆尤新,没有资源将这个玩具开发为具有与 WCF 功能奇偶校验的完整产品,但是有许多客户 无法在不对其WCF服务进行完全重写的情况下迁移到 .NET Core。 Matt Connew最终决定 将花一些时间打磨一下的原型实现,包括添加NetTcp支持,并将代码捐赠给开源社区,托管到.NET基金会,看看这是否社区将围绕它构建的东西,以便在Microsoft之外生存下去。

Matt Connew 个人对 WCF 充满热情,因为它以有趣且通常很复杂的方式解决了许多难题,并且Matt Connew 喜欢解决有趣而复杂的问题。有人问Matt Connew 是否想亲自拥有这个项目。起初Matt Connew 很犹豫,因为Matt Connew 担心将会是自己亲自承诺移植大部分代码库。2019年6月7日 Matt Connew将Core WCF的初始代码提交到了Github https://github.com/corewcf/corewcf, 在项目开始公开开发后不久,来自 Amazon AWS 的 Biroj Nayak 联系了Matt Connew,询问他们如何帮助为 Core WCF 做出贡献。AWS 有自己的客户询问可以做些什么来将其 WCF 服务移植到云中。这开始了微软与亚马逊的多年合作,AWS将一些非常大且重要的功能从WCF移植到Core WCF。在 ASP.NET Core之上重建通道层需要对大部分代码库进行重大重构,并且某些功能涉及大量需要提交在一个大块代码中。Biroj 承担了长达数月的任务,将一些较大的缺失功能移植到 CoreWCF。

随后,我们开始从社区获得一些较小的贡献。添加对未包含的狭窄方案的支持,或修复新代码无法处理的边缘情况。随着时间的流逝,社区贡献的规模和数量逐渐不断增加。我们已经看到越来越多的公司贡献了开发人员资源来移植重要功能。Matt Connew对成为唯一一个致力于将WCF移植到.NET Core的人的担忧已经完全消除。我们最近达到了一个里程碑,即Matt Connew 向核心 WCF 存储库贡献的提交不到一半,有一个Core WCF社区来推动WCF的演进。Matt Connew现在将大部分时间用于 Core WCF,用于审查其他人的代码,并承担更多的架构师角色,以使其他人能够做出贡献。我们要向所有为这个项目做出贡献的人表示衷心的感谢,以使其取得成功。

1.0 版本 标签代表什么意义?

除了命名变量之外,软件开发中最棘手的问题之一是它何时准备好发布?如果我们等待与 WCF 的功能奇偶校验,我们可能永远不会使用 v1,因为某些功能缺少依赖项。我们决定,当核心 WCF 对大量 WCF 客户在生产中使用“有用”时,我们愿意应用 v1 标签。有用是一个非常模糊和模糊的栅栏,所以我们必须决定这意味着什么。我们想出来的是能够将 SOAP 与 HTTP 传输一起使用,具有会话传输,并能够为服务生成 WSDL。我们已经在 ASP.NET Core的连接处理程序功能之上实现了NetTcp,因此涵盖了支持会话传输的内容。剩下的主要事情是 WSDL 支持。在此过程中,社区决定为TransportWithMessageCredentials,WS-Federation,Configuration,ReSTful服务的WebHttpBinding以及许多其他较小的功能提供支持,包括一些甚至在WCF上不存在的功能。随着最近 WSDL 生成的完成,我们现在处于一个阶段,我们认为核心 WCF 应该对许多使用 WCF 的开发人员有用。

仍然缺少一些值得注意的功能。例如,我们尚不支持跟踪,您需要在 ASP.NET 核心中配置 HTTP 身份验证,而不是通过绑定。如果这是你第一次考虑使用 CoreWCF,我建议你阅读前面的博客文章,因为它们包含许多有关如何将服务移植到 Core WCF 的答案。

缺少我需要的功能,我该怎么办?

缺少的功能分为两类。

  • 实现已存在,但不是公开的
  • 完全没有实现

当实现在那里但不是公开的,那是因为我们还没有测试它。在没有测试端口中所做的任何更改都没有问题的情况下公开API将导致大量噪音和不良体验。如果您发现需要一个内部扩展点,则获得支持的最快方法是提交一个 PR,使其公开,并进行一些测试,以验证可扩展性点是否按预期工作。

如果完全没有所需的功能,您有两种选择:

  • 第一个选项是检查它是否在功能路线图问题上,如果不是,请添加它。然后按照问题顶部的说明对该功能投赞成票。在决定下一步要处理哪个功能时,我们会强烈权衡需求。
  • 第二个选项是提供开发人员资源来移植功能。WebHttp 功能就是这种情况的一个例子。对于一个需要它的客户来说,移植WebHttpBinding在优先级列表中太低了,因此在一些指导下,他们移植了该功能。

另一种方法可能是修改服务以使用提供相同功能的其他功能。例如,如果您当前使用的是 NetNameedPipeBinding,则切换到 NetTcpBinding。

自 0.4.0 以来的新增功能

自 Core WCF 0.4.0 发布以来,添加了以下新功能:

  • WebHttpBinding 支持 OpenApi 功能 - Jonathan Hope, Digimarc (@JonathanHopeDMRC)
  • WS-Federation 支持 - Biroj Nayak, Amazon AWS (@birojnayak)
  • WSDL 支持,包括 ServiceDebugBehavior - Matt Connew, Microsoft (@mconnew)
  • 新增了对将 HttpContext、HttpRequest 和 HttpResponse 对象注入到服务实现方法中的支持。这还包括支持coreWCF InjectedAttribute之外 ASP.NET Core FromServicesAttribute - Guillaume Delahaye(@g7ed6e)
  • 配置的自定义绑定支持 - (@kbrowdev)

有 3 篇新的博客文章讨论了其中一些新功能:
-WebHttpBinding 支持
-WSDL 支持
-WS-Federation 支持

微软官方支持

随着Core WCF的v1.0.0版本,Microsoft正在提供支持。当前支持生命周期可在 http://aka.ms/corewcf/support 中找到。Microsoft 发布了一篇博客文章,解释了 Core WCF 的支持策略。

本文翻译自 https://corewcf.github.io/blog/2022/04/28/corewcf-1_0_0_release ,并对背景做些解读。

posted @ 2022-04-29 08:44  张善友  阅读(3538)  评论(5编辑  收藏  举报