為何我們為 WCF 開發人員建議 gRPC

提示

此內容是適用于 WCF 開發人員的電子書、gRPC 的摘錄,可在 .NET Docs 上取得,或作為可離線讀取的免費 PDF。

《gRPC for WCF developers》電子書封面縮圖。

在深入探討 gRPC 的語言和技術之前,值得討論為何 gRPC 是 Windows Communication Foundation (WCF 的正確解決方案,) 想要移轉至 .NET 的開發人員。

與 WCF 相似

雖然 gRPC 的實作和方法不同,但 WCF 開發人員應可憑直覺使用 gRPC 開發及取用服務。 基本目標相同:撰寫程式碼時,用戶端和伺服器好像在相同的平台上,不需要擔心網路。

即使宣告介面的流程不同,兩個平台也可以共用宣告然後實作介面的原則。 如您在第 5 章所見,gRPC 支援的不同 RPC 呼叫類型會妥善對應到 WCF 服務可用的繫結。

gRPC 的優點

gRPC 優於其他解決方案的原因如下。

效能

使用 HTTP/2 而非 HTTP/1.1 可消除對人類可讀取訊息的需求,改用較小但更快速的二進位通訊協定。 這讓電腦剖析更有效率。 HTTP/2 也支援透過單一連線的多工處理要求。 這項支援可讓回應一就緒即傳送,不需要在佇列中等候。 (在 HTTP/1.1 中,此問題稱為「隊頭阻塞 (HOL) 封鎖」。) 使用 gRPC 時需要的資源較少,這使其成為適合行動裝置和較慢網路使用的良好解決方案。

互通性

所有主要程式設計語言和平臺都有 gRPC 工具和程式庫,包括 .NET、JAVA、Python、Go、C++、Node.js、Swift、Ruby、Ruby 和 PHP。 因為通訊協定緩衝區二進位線路格式和各平台產生的有效程式碼,開發人員可以建置高效能的應用程式,又能享有完整的跨平台支援。

可用性和產能

gRPC 是完整的 RPC 解決方案。 它能在多種語言和平台中保持一致。 它也提供絕佳的工具,自動產生大部分必須重複使用的程式碼。 所以,開發人員能有更多時間專注在商務邏輯。

串流

gRPC 具有完整的雙向串流,提供類似 WCF 全雙工服務的功能。 gRPC 串流可以透過一般網際網路連線、負載平衡器和服務網格運作。

期限/逾時和取消

gRPC 允許用戶端指定完成 RPC 的最長時間。 如果超過指定的期限,伺服器可以取消與用戶端無關的作業。 期限和取消可以透過進一步的 gRPC 呼叫傳播,以協助強制執行資源使用量限制。 用戶端也可以在超過期限時,或視需要 (例如,因為使用者互動) 提前停止作業。

安全性

在 TLS 端對端加密連線中使用 HTTP/2 時,會以隱含方式保護 gRPC。 支援用戶端憑證驗證 (請參閱第 6 章) 可進一步提高用戶端與伺服器之間的安全性和信任度。

與 CoreWCF 的比較

移轉至 .NET 時,gRPC 值得注意的替代方式是 CoreWCF,以取代 WCF 服務。 gRPC 和 CoreWCF 都是轉送 WCF 應用程式的 Microsoft 背書路徑,各有優缺點。

CoreWCF 是 Microsoft 支援的社群擁有 .NET Foundation 專案,可實作適用于 .NET 的 WCF 伺服器 API。 CoreWCF 是一項工作,可讓現有的 WCF 服務在 .NET 上使用最少的變更。 使用 CoreWCF 時,WCF 的資料合約不變,且支援許多 WCF 的繫結和 API。 主要差異為啟動 WCF 服務的模式,並非所有組態選項均可使用 (有些組態現在必須在程式碼中完成)。

服務與介面在移轉時通常會略有變更。 因此,CoreWCF 的主要優點就是與 WCF 的相容性非常高。 在進行變更時,它們會適應新式 .NET 的程式設計樣式,例如,現在透過 ASP.NET Core 裝載,而 API 現在使用 Task 可用的 await 非同步模式,而不是舊版 BeginXXX / EndXXX 模式。

另一方面,gRPC 是具有許多功能的新式遠端通訊解決方案,如前所述。 使用 gRPC 的優點包括跨程式設計語言的更佳互通性、相對簡單的新式 API,以及廣大的社群生態系統。

決定要使用 CoreWCF 或 gRPC 將 WCF 應用程式移轉至 .NET 時,如果 CoreWCF 的目標是要以最少的變更來移轉應用程式,則 CoreWCF 通常較適合,而如果 gRPC 的目標是將應用程式現代化,而將目標重新設定為 .NET 時,通常較適合。 本指南其餘內容著重於使用 gRPC 現代化。