最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core 3.0 gRPC攔截器的使用

 更新時間:2019年12月23日 14:48:57   作者:曉晨Master  
這篇文章主要介紹了ASP.NET Core 3.0 gRPC攔截器的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一. 前言

前面兩篇文章給大家介紹了使用gRPC的入門以及雙向流的使用,今天介紹的是gRPC中的攔截器。攔截器就像MVC的過濾器或者是ASP.NET Core middleware 一樣,具有面向切面的思想,可以在調用服務的時候進行一些統(tǒng)一處理, 很適合在這里處理驗證、日志等流程。本片文章就以記錄日志為例來進行講解。

二. Interceptor 類介紹

Interceptor類是gRPC服務攔截器的基類,是一個抽象類,它定了幾個虛方法,分別如下:

public virtual TResponse BlockingUnaryCall<TRequest, TResponse>();
public virtual AsyncUnaryCall<TResponse> AsyncUnaryCall<TRequest, TResponse>();
public virtual AsyncServerStreamingCall<TResponse> AsyncServerStreamingCall<TRequest, TResponse>();
public virtual AsyncClientStreamingCall<TRequest, TResponse> AsyncClientStreamingCall<TRequest, TResponse>();
public virtual AsyncDuplexStreamingCall<TRequest, TResponse> AsyncDuplexStreamingCall<TRequest, TResponse>();
public virtual Task<TResponse> UnaryServerHandler<TRequest, TResponse>();
public virtual Task<TResponse> ClientStreamingServerHandler<TRequest, TResponse>();
public virtual Task ServerStreamingServerHandler<TRequest, TResponse>();
public virtual Task DuplexStreamingServerHandler<TRequest, TResponse>();

各個方法作用如下:

方法名稱 作用
BlockingUnaryCall 攔截阻塞調用
AsyncUnaryCall 攔截異步調用
AsyncServerStreamingCall 攔截異步服務端流調用
AsyncClientStreamingCall 攔截異步客戶端流調用
AsyncDuplexStreamingCall 攔截異步雙向流調用
UnaryServerHandler 用于攔截和傳入普通調用服務器端處理程序
ClientStreamingServerHandler 用于攔截客戶端流調用的服務器端處理程序
ServerStreamingServerHandler 用于攔截服務端流調用的服務器端處理程序
DuplexStreamingServerHandler 用于攔截雙向流調用的服務器端處理程序

在實際使用中,可以根據(jù)自己的需要來使用對應的攔截方法。

三. 客戶端攔截器

基于前面兩篇文章使用的Demo。

在客戶端項目新建一個類,命名為 ClientLoggerInterceptor,繼承攔截器基類 Interceptor。

我們在前面使用的Demo,定義了擼貓服務,其中 SuckingCatAsync方法為異步調用,所以我們重寫攔截器的 AsyncUnaryCall方法

public class ClientLoggerInterceptor:Interceptor
{
  public override AsyncUnaryCall<TResponse> AsyncUnaryCall<TRequest, TResponse>(
    TRequest request,
    ClientInterceptorContext<TRequest, TResponse> context,
    AsyncUnaryCallContinuation<TRequest, TResponse> continuation)
  {
    LogCall(context.Method);

    return continuation(request, context);
  }

  private void LogCall<TRequest, TResponse>(Method<TRequest, TResponse> method)
    where TRequest : class
    where TResponse : class
  {
    var initialColor = Console.ForegroundColor;
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine($"Starting call. Type: {method.Type}. Request: {typeof(TRequest)}. Response: {typeof(TResponse)}");
    Console.ForegroundColor = initialColor;
  }
}

注冊攔截器:

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var invoker = channel.Intercept(new ClientLoggerInterceptor());
var catClient = new LuCat.LuCatClient(invoker);
var catReply = await catClient.SuckingCatAsync(new Empty());
Console.WriteLine("調用擼貓服務:"+ catReply.Message);

然后運行:

可以看到成功的在客戶端攔截到了調用,并記錄了調用信息。

四. 服務端攔截器

在服務端項目新建一個類,命名為 ServerLoggerInterceptor,繼承攔截器基類 Interceptor

我們在服務端需要實現(xiàn)的方法是 UnaryServerHandler

public class ServerLoggerInterceptor: Interceptor
{
  private readonly ILogger<ServerLoggerInterceptor> _logger;

  public ServerLoggerInterceptor(ILogger<ServerLoggerInterceptor> logger)
  {
    _logger = logger;
  }

  public override Task<TResponse> UnaryServerHandler<TRequest, TResponse>(
    TRequest request,
    ServerCallContext context,
    UnaryServerMethod<TRequest, TResponse> continuation)
  {
    LogCall<TRequest, TResponse>(MethodType.Unary, context);
    return continuation(request, context);
  }

  private void LogCall<TRequest, TResponse>(MethodType methodType, ServerCallContext context)
    where TRequest : class
    where TResponse : class
  {
    _logger.LogWarning($"Starting call. Type: {methodType}. Request: {typeof(TRequest)}. Response: {typeof(TResponse)}");
  }
}

注冊攔截器:

public void ConfigureServices(IServiceCollection services)
{
  services.AddGrpc(options =>
  {
    options.Interceptors.Add<ServerLoggerInterceptor>();
  });
}

運行:

可以看到服務端成功攔截到了,客戶端的調用。

五. 參考資料

.NET Core 上的 gRPC 的簡介

本文Demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 動態(tài)加載Js代碼到Head標簽中的腳本

    動態(tài)加載Js代碼到Head標簽中的腳本

    我遇到了這樣的問題,請教google,結果大多數(shù)只是介紹那個注冊js的幾個函數(shù),而這幾個函數(shù)插入的js都在body里面,幸而在老外那里看到了這個代碼,其實比較簡單,但夠有用
    2009-01-01
  • 關于.NET6?Minimal?API的使用方式詳解

    關于.NET6?Minimal?API的使用方式詳解

    本文我們主要是介紹了ASP.NET?Core?6?Minimal?API的常用的使用方式,在.NET6中也是默認的項目方式,整體來說卻是非常的簡單、簡潔、強大、靈活,不得不說Minimal?API卻是在很多場景都非常適用的
    2021-12-12
  • asp.net 獲取銀行貨幣匯率的代碼

    asp.net 獲取銀行貨幣匯率的代碼

    這個主要公司做外貿的每天都需要更新匯率,本來以前有一個服務可以調用,但是那個連接用不了 所以就寫了一個這樣的東西 套取網頁顯示信息
    2010-12-12
  • Asp.net利用一般處理程序實現(xiàn)文件下載功能

    Asp.net利用一般處理程序實現(xiàn)文件下載功能

    這篇文章主要介紹了Asp.net利用一般處理程序實現(xiàn)文件下載功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-07-07
  • MVC4制作網站教程第四章 更新欄目4.3

    MVC4制作網站教程第四章 更新欄目4.3

    這篇文章主要為大家詳細介紹了MVC4制作網站教程,更新欄目功能實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • asp.net(c#)實現(xiàn)從sqlserver存取二進制圖片的代碼

    asp.net(c#)實現(xiàn)從sqlserver存取二進制圖片的代碼

    有一個員工表Employee,需要保存員工照片(Photo)到數(shù)據(jù)庫(sql server)上。員工照片對應的字段是varbinary(max),也就是要存成二進制文件類型(這和以前討巧地存圖片文件路徑就不相同了),默認可以為空。
    2011-09-09
  • .Net基于MVC4 Web Api輸出Json格式實例

    .Net基于MVC4 Web Api輸出Json格式實例

    這篇文章主要介紹了.Net基于MVC4 Web Api輸出Json格式的實現(xiàn)方法,實例講述了Global中json的操作與XML的處理等技巧,需要的朋友可以參考下
    2014-10-10
  • .NET6打包部署到Windows?Service的全過程

    .NET6打包部署到Windows?Service的全過程

    net用了這么久,雖然多數(shù)都是部署在centos系統(tǒng),但也有部署在windows上的情況,下面這篇文章主要給大家介紹了關于.NET6打包部署到Windows?Service的相關資料,需要的朋友可以參考下
    2022-10-10
  • asp.net core 多文件分塊同時上傳的組件

    asp.net core 多文件分塊同時上傳的組件

    分享一個可多個文件同時上傳、斷點續(xù)傳,并實時反饋上傳進度的 Asp.Net core 組件,本文通過實例代碼對asp.net core 多文件分塊同時上傳的組件知識介紹的非常詳細,感興趣的朋友一起看看吧
    2023-12-12
  • ASP.NET Core按用戶等級授權的方法

    ASP.NET Core按用戶等級授權的方法

    這篇文章主要介紹了ASP.NET Core按用戶等級授權,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論

西畴县| 马龙县| 云梦县| 上饶县| 汕头市| 梁河县| 内丘县| 北川| 登封市| 昆明市| 庄河市| 玉树县| 东台市| 安泽县| 伽师县| 鸡泽县| 兴宁市| 鹤山市| 汕头市| 嘉定区| 阿拉尔市| 阳谷县| 渑池县| 墨江| 临潭县| 西安市| 玉门市| 临桂县| 镇沅| 洪泽县| 新化县| 荔浦县| 游戏| 邹城市| 盐城市| 江北区| 沂源县| 绿春县| 涿州市| 交口县| 宜兴市|