ASP.NET Core 3.0 gRPC拦截器的使用_实用技巧

来源:脚本之家  责任编辑:小易  

ASP.NET和ASP的区别有以下几点:1、开发语言不同。ASP使用non-type脚本语言来开发应用程序或web网页,在web端添加代码和在客户端添加代码一致,导致代码杂乱无章。ASP.NET使用strongly-type编程语言开发应用程序或web网页,也可以使用.NET Framework框架开发,代码一致性较ASP好了许多。2、运行方式不同。ASP是解释运行的编程框架,使用js等脚本语言,运行速度慢。ASP.NET是编译性的编程框架,运行效率高且使用的是服务器端预先编译好的代码库。3、开发方式不同。ASP是面向过程设计语言,代码前后端不分离,写在同一个页面,代码杂乱无章,维护性和可重用性较低。ASP.NET则是面向对象设计语言,代码前后端分离,一部分专注于编写前端代码,一部分专注于编写相应的后台功能,代码井然有序,易维护且可重用性高。4、复杂性不同。ASP复杂性低,代码容易理解,但是开发效率不高。ASP.NET则较为复杂,但是具有相应的框架,程序设计快速且思路清晰www.zgxue.com防采集请勿采集本网。

一. 前言

ASP和asp.net的区别从编程语言种类,服务器,硬件环境的这三方面看区别,其中编程语言种类的区别是最主要的。第一,从编程语言种类看区别。ASP用VBScript、JavaScript等简单容易的脚本语言。结合

前面两篇文章给大家介绍了使用gRPC的入门以及双向流的使用,今天介绍的是gRPC中的拦截器。拦截器就像MVC的过滤器或者是ASP.NET Core middleware 一样,具有面向切面的思想,可以在调用服务的时候进行一些统一处理, 很适合在这里处理验证、日志等流程。本片文章就以记录日志为例来进行讲解。

ASP.Net是什么 1 ASP.Net是什么?ASP.Net是建立在微软新一代.Net平台架构上,利用普通语言运行时(Common Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架。2.

二. Interceptor 类介绍

ASP和ASP.NET是2个不同的东西,只是它们都是微软的,在IIS上可以很好的支持,所以可以混用在一起。ASP是解释型语言,在执行效率上不高,属于过期技术,但网上的源码不少,在开发低成本小网站上

Interceptor类是gRPC服务拦截器的基类,是一个抽象类,它定了几个虚方法,分别如下:

分析你的问题,你所谓C#.net大概是指在.net平台下使用C#做开发,这个说法就包括了在.net平台下用C#做B/S模式开发也就是包括Asp.net开发。C#只是一种开发语言,而.net是一个开发和用户体验环境。

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>();

asp.net 不是语言也不是数据库,asp和asp.net都是一门技术,asp是老的,asp.net是微软推出的新的技术,注意,是技术,不是语言。asp.net用的语言是C#,用的框架是.Net框架,以上是程序开发的技术

各个方法作用如下:

方法名称 作用
BlockingUnaryCall 拦截阻塞调用
AsyncUnaryCall 拦截异步调用
AsyncServerStreamingCall 拦截异步服务端流调用
AsyncClientStreamingCall 拦截异步客户端流调用
AsyncDuplexStreamingCall 拦截异步双向流调用
UnaryServerHandler 用于拦截和传入普通调用服务器端处理程序
ClientStreamingServerHandler 用于拦截客户端流调用的服务器端处理程序
ServerStreamingServerHandler 用于拦截服务端流调用的服务器端处理程序
DuplexStreamingServerHandler 用于拦截双向流调用的服务器端处理程序

在实际使用中,可以根据自己的需要来使用对应的拦截方法。

三. 客户端拦截器

基于前面两篇文章使用的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

我们在服务端需要实现的方法是 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

分析:ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和Web服务的技术。ASP.NET页在服务器上执行,并生成发送到桌面或浏览器的标记(如HTML、XML或者WML)。可以使用任何.NET兼容语言(比如Visual Basic、C#)编写Web服务文件中的服务器端(而不是客户端)逻辑。ASP.NET页使用一种由事件驱动的、已编译的编程模型,这种模型可以提高性能并支持将用户界面层同应用程序逻辑层相隔离。注意:Web应用程序和Web服务可调用公共语言运行库的任意功能,例如类型安全、继承、语言互操作、版本控制和集成安全性等。ASP.NET技术有几个显著的特性,既:1、强大性和适应性 因为ASP.NET是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在支持.NET Framework所有平台上。ASP.NET同时也是language-independent语言独立化的,所以,可以选择一种最适合自己的语言来编写应用程序,或者可以用多种语言来写应用程序,这样的多种程序语言协同工作的能力可以保护基于COM+开发的程序,并能够完整的移植向ASP.NET。2、简单性和易学性.NET Framework封装了大量的类库,使ASP.NET完成一些常见的任务如表单的提交、客户端的身份验证、分布系统,并可以使网站配置变得非常简单。3、高效可管理性 ASP.NET使用一种字符基础的、分级的配置系统,使服务器环境和应用程序的设置更加简单。ASP.NET已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,可以很大的提高运行速度。即使现在的ASP.NET应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高运行效能。总结:ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和Web服务的技术,利用公共语言运行时(Common Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp.net core identity 隐私数据保护的实现
  • .net core3 用windows 桌面应用开发asp.net core网站
  • asp.net core 3.0使用grpc的具体方法
  • 浅谈asp.net core的几种托管方式
  • asp.net core 授权详解
  • asp.net使用subtract方法获取两个日期之间的天数
  • visual studio debug实战教程之基础入门
  • 生成代码从t到t1、t2、tn自动生成多个类型的泛型实例代码
  • 在应用程序级别之外使用注册为allowdefinition=''machinetoappli
  • asp.net方法如何重载需要必备哪些条件
  • asp.net在iis上注册报0x800702e4错误解决方法
  • asp.net 防止按钮多次提交核心实现代码
  • asp.net中ckeditor与ckfinder的配置使用
  • dotnet onprerender(eventargs e) 事件常用的方法
  • mongodb.net工具库mongorepository使用方法详解
  • ASP.NET是什么
  • ASP.NET和ASP的区别是什么?
  • .Net 和ASP.Net 有什么区别呢?
  • asp.net是什么?
  • ASP和asp.net有什么区别的呢?最主要的区别是什么呢?
  • ASP NET 是什么?
  • .net和asp的区别
  • asp.net与.net的区别
  • asp.net有什么用,主要是做什么的?
  • asp.net中与的区别?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧asp.net core identity 隐私数据保护的实现.net core3 用windows 桌面应用开发asp.net core网站asp.net core 3.0使用grpc的具体方法浅谈asp.net core的几种托管方式asp.net core 授权详解asp.net使用subtract方法获取两个日期之间的天数visual studio debug实战教程之基础入门生成代码从t到t1、t2、tn自动生成多个类型的泛型实例代码在应用程序级别之外使用注册为allowdefinition=""machinetoappliasp.net方法如何重载需要必备哪些条件asp.net在iis上注册报0x800702e4错误解决方法asp.net 防止按钮多次提交核心实现代码asp.net中ckeditor与ckfinder的配置使用dotnet onprerender(eventargs e) 事件常用的方法mongodb.net工具库mongorepository使用方法详解java正则表达式 pattern和matche未将对象引用设置到对象的实例 (asp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net汉字转拼音和获取汉字首字asp.net对路径"xxxxx"asp.net application_acquirerequeststatasp.net中实时图表的实现方法分享解决.net framework 4.0环境下遇到版本不visual studio(vs2017)配置c/c++ postgreasp.net split分割字符串的方法path类与directory类与file类对路径/目录asp.net常用小技巧asp.net 动态添加多个用户控件list泛型自定义排序示例asp.net性能优化技巧汇总
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved