CoreWCF 1.0.0 釋出,微軟正式支援WCF

張善友發表於2022-04-29

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 ,並對背景做些解讀。

相關文章