C# netCore Grpc服務 (2)配置 ,proto以及四種呼叫方式

Silen_p發表於2019-11-04

上一篇:C# netCore Grpc服務 (1)初步認知和HelloWorld

先補充一下,上一篇中,通過程式碼指定地址
在這裡插入圖片描述
相關配置值在appsettings.json檔案中
也可以通過配置檔案進行指定:

"Kestrel": {
    //"EndpointDefaults": {
    //  "Protocols": "Http2"
    //},
    "Endpoints": {
      "HttpsInlineCertFile": {
        "Url": "http://localhost:50001",
        "Protocols": "Http2" //,
        //"Certificate": {//證書,使用TLS時指定路徑及密碼
        //  "Path": "<path to .pfx file>",
        //  "Password": "<certificate password>"
        //}
      }
    }
  }

在這裡插入圖片描述
說明:
指定服務名稱,以及呼叫方法
指定訊息型別,裡面有哪些成員名稱以及位置
(支援string,Int32,double,int64等多種型別)

1.自定義服務:

1.建立proto檔案
在這裡插入圖片描述
在專案檔案中新增對此檔案的引用
在這裡插入圖片描述
在proto檔案中宣告方法,訊息型別
在這裡插入圖片描述

2.建立服務
在這裡插入圖片描述在這裡插入圖片描述
程式碼如上圖
實現proto檔案中指定的方法
(注意服務類繼承的父類要和proto檔案中指定service名稱一致)
格式是:
xxx.xxxBase

客戶端配置:基本同上篇
最終效果:
服務端:
在這裡插入圖片描述
客戶端:

在這裡插入圖片描述

2.gRPC方法型別

GRPC 呼叫通過在客戶端上呼叫方法來啟動。 GRPC 客戶端將處理訊息序列化,並將 gRPC 呼叫定址到正確的服務。

gRPC 具有不同型別的方法。 使用客戶端進行 gRPC 呼叫的方式取決於所呼叫的方法的型別。

1.一元呼叫

上面的case中的方法型別為一元呼叫
一元呼叫:從客戶端傳送請求訊息開始。 服務完成後,將返回響應訊息。

*Proto檔案中的每個一元服務方法將導致用於呼叫方法的具體 gRPC 客戶端型別上有兩個 .net 方法:一個非同步方法和一個阻止方法
例如, GreeterClient可以通過兩種方法呼叫SayHello
在這裡插入圖片描述
GreeterClient.SayHelloAsync-以Greeter.SayHello非同步方式呼叫服務。 可以等待。
GreeterClient.SayHello-呼叫Greeter.SayHello服務和阻止到完成。 不要在非同步程式碼中使用。

2.服務端流式處理呼叫

上面的一元呼叫屬於 客戶端1個輸入,服務端1個輸出
服務端流式處理呼叫則屬於 客戶端1個輸入,服務端多個輸出(一個流)

proto格式:
在這裡插入圖片描述

注意GetLocateInfo3中的returns,和第一個方法相比其他都一樣,僅在returns中多了一個stream

重寫方法:
在LocateService中 鍵入override
在這裡插入圖片描述
修改proto檔案儲存後直接通過這種方式重寫即可
或者另一種方法:
在這裡插入圖片描述
點選LocaterBase,然後按F12,可檢視相關函式的定義,將其複製出來然後簡寫即可
在這裡插入圖片描述
上圖重寫中,給輸出流寫入了5個LocateReply

客戶端:
新增方法的宣告,具體同上
呼叫方式:
在這裡插入圖片描述
最終效果截圖:
服務端:
在這裡插入圖片描述
客戶端:
在這裡插入圖片描述

3.客戶端流式處理呼叫

方法定義同上,只是stream的位置不在返回了,而是在輸入
服務端方法重寫:
在這裡插入圖片描述
在這裡插入圖片描述
客戶端配置:略,同上
客戶端呼叫:

在這裡插入圖片描述

呼叫方法會返回一個AsyncClientStreamingCall型別
在這裡插入圖片描述

再呼叫RequestStream.WriteAsync非同步方法寫入輸入引數流
寫入完成後
通知完成,呼叫CompleteAsync方法
再呼叫非同步方法獲取返回值

最終結果:
服務端:懶得貼圖了
客戶端:
在這裡插入圖片描述
最後一行是客戶端流式呼叫的結果

4.雙向流

其實這個也蠻簡單,相當於上面2.3兩個的結合

呼叫:
在這裡插入圖片描述

服務端:
在這裡插入圖片描述
客戶端:

在這裡插入圖片描述

相關文章