.NET 開源專案 StreamJsonRpc 介紹[下篇]
阿新 • • 發佈:2020-07-16
閱讀本文大概需要 9 分鐘。
大家好,這是 .NET 開源專案 StreamJsonRpc 介紹的最後一篇。[上篇](https://mp.weixin.qq.com/s/3V4mCdFvNzUzqkqKm-rzpw)介紹了一些預備知識,包括 JSON-RPC 協議介紹,StreamJsonRpc 是一個實現了 JSON-RPC 協議的庫,它基於 Stream、WebSocket 和自定義的全雙工管道傳輸。[中篇](https://mp.weixin.qq.com/s/NgifmBGV7ipxNMCyDmG0FA)通過示例講解了 StreamJsonRpc 如何使用全雙工的 Stream 作為傳輸管道實現 RPC 通訊。本篇(下篇)將繼續通過示例講解如何基於 WebSocket 傳輸管道實現 RPC 通訊。 ## 準備工作 為了示例的完整性,本文示例繼續在[中篇](https://mp.weixin.qq.com/s/NgifmBGV7ipxNMCyDmG0FA)建立的示例基礎上進行。該示例的 GitHub 地址為: [github.com/liamwang/StreamJsonRpcSamples](https://github.com/liamwang/StreamJsonRpcSamples) 我們繼續新增三個專案,一個是名為 WebSocketSample.Client 的 Console 應用,一個是名為 WebSocketSample.Server 的 ASP.NET Core 應用,還有一個名為 Contract 的契約類庫(和 gRPC 類似)。 ![ ](https://img2020.cnblogs.com/blog/191097/202007/191097-20200715201442433-108032433.png) 你可以直接複製並執行下面的命令一鍵完成大部分準備工作: ```bash dotnet new console -n WebSocketSample.Client # 建新客戶端應用 dotnet new webapi -n WebSocketSample.Server # 新建服務端應用 dotnet new classlib -n Contract # 新建契約類庫 dotnet sln add WebSocketSample.Client WebSocketSample.Server Contract # 將專案新增到解決方案 dotnet add WebSocketSample.Client package StreamJsonRpc # 為客戶端安裝 StreamJsonRpc 包 dotnet add WebSocketSample.Server package StreamJsonRpc # 為服務端安裝 StreamJsonRpc 包 dotnet add WebSocketSample.Client reference Contract # 新增客戶端引用 Common 引用 dotnet add WebSocketSample.Server reference Contract # 新增服務端引用 Common 引用 ``` 為了把重點放在實現上,這次我們依然以一個簡單的功能作為示例。該示例實現客戶端向服務端傳送一個問候資料,然後服務端響應一個訊息。為了更貼合實際的場景,這次使用強型別進行操作。為此,我們在 Contract 專案中新增三個類用來約定客戶端和服務端通訊的資料結構和介面。 用於客戶端傳送的資料的 HelloRequest 類: ```cs public class HelloRequest { public string Name { get; set; } } ``` 用於服務端響應的資料的 HelloResponse 類: ```cs public class HelloResponse { public string Message { get; set; } } ``` 用於約定服務端和客戶端行為的 IGreeter 介面: ```cs public interface IGreeter { Task