宝安做网站哪家好广东网站建设效果
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:04
当前位置: 首页 > news >正文
宝安做网站哪家好,广东网站建设效果,国家企业信用信息公示系统辽宁,wordpress经常502文章目录 1.HttpClientFactory #xff1a;管理外向请求的最佳实践1.1 核心能力1.2 核心对象1.3 HttpClient创建模式 2.gRPC#xff1a;内部服务间通讯利器2.1 什么是gRPC2.2 特点gRPC特点2.3.NET生态对gRPC的支持情况2.4 服务端核心包2.5 客户端核心包2.5 .proto文件2.6 gRP… 文章目录 1.HttpClientFactory 管理外向请求的最佳实践1.1 核心能力1.2 核心对象1.3 HttpClient创建模式 2.gRPC内部服务间通讯利器2.1 什么是gRPC2.2 特点gRPC特点2.3.NET生态对gRPC的支持情况2.4 服务端核心包2.5 客户端核心包2.5 .proto文件2.6 gRPC异常处理2.7 gRPC与HTTPS证书2.8 gRPC命令行工具2.8.1 工具核心包2.8.2 核心命令2.8.3 最佳实践 1.HttpClientFactory 管理外向请求的最佳实践 1.1 核心能力 管理内部HttpMessageHandler的生命周期灵活应用资源问题和DNS刷新问题支持命名化、类型化配置集中管理配置避免冲突灵活的出站请求管道配置轻松管理请求声明周期内置管道最外层和最内层日志记录器有Information和Trace输出 1.2 核心对象 HttpClientHttpMessageHandlerSocketsHttpHandlerDelegatingHandlerIHttpClientFactoryIHttpClientBuilder 管道模型 请求过程 HttpClient发起请求然后最外层的日志记录器来记录日志然后再进到自定义的Handler中处理自定义的逻辑 然后最内层的SocketsHttpHandler这是真正去发起远程调用的处理程序它回向远程站点发起HTTP请求并接受响应在接收到响应以后Http最内层的日志记录器会记录响应信息 随后将响应结果交还给自定义的Handler在接受响应后处理接受响应的逻辑处理完成后最外层的日志记录器会输出响应日志最终HttpClient拿到响应结果输出给应用程序 1.3 HttpClient创建模式 工厂模式命名客户端模式类型化客户端模式 // 工厂模式 public class OrderServiceClient {IHttpClientFactory _httpClientFactory;public OrderServiceClient(IHttpClientFactory httpClientFactory){_httpClientFactory httpClientFactory;}public async Taskstring Get(){var client _httpClientFactory.CreateClient();return await client.GetStringAsync(这里是远程服务路径地址);// 相对路径访问} }// 命名客户端 public class NamedOrderServiceClient {IHttpClientFactory _httpClientFactory;const string _clientName NamedOrderServiceClient;public NamedOrderServiceClient(IHttpClientFactory httpClientFactory){_httpClientFactory httpClientFactory;}public async Taskstring Get(){var client _httpClientFactory.CreateClient(_clientName);return await client.GetStringAsync(这里是远程服务路径地址);// 相对路径访问} }// 类型客户端 public class TypeOrderServiceClient {HttpClient _client;public TypeOrderServiceClient(HttpClient client){_client client;}public async Taskstring Get(){ return await _client.GetStringAsync(这里是远程服务路径地址);// 相对路径访问} }// HttpClientFactory注册startup中ConfigurationService public void ConfigureServices(IServiceCollection services) {// 工厂模式services.AddHttpClient();services.AddScopeOrderServiceClient();// 命名客户端模式services.AddHttpClient(NamedOrderServiceClient,client {client.DefaultRequestHeaders.Add(client-name,nameclient);client.BaseAddress new Uri(远程站点根路径);}).AddHttpMessageHandler(provider provider.GetServiceRequestIdDelegatingHandler());//自定义Handlerservices.AddScopeNamedOrderServiceClient();//推荐使用// 类型客户端,services.AddHttpClientTypeOrderServiceClient(client {client.BaseAddress new Uri(远程站点根路径);}); }// Controller中使用 public class OrderController : ControllerBase {OrderServiceClient _orderServiceClient;public OrderController(OrderServiceClient orderServiceClient){_orderServiceClient orderServiceClient;}[HttpGet(Get)]public Taskstring Get(){return await _orderServiceClient.Get();}[HttpGet(NameGet)]public Taskstring NamedGet([FromServices] NamedOrderServiceClient serviceClient){return await serviceClient.Get();}[HttpGet(TypeGet)]public async Taskstring TypeGet([FromServices] TypeOrderServiceClient client){return await client.Get();} } 2.gRPC内部服务间通讯利器 2.1 什么是gRPC 定义 gRPC是一个远程过程调用框架作用是让我们可以像在调用本地的类一样调用远程的服务。由Google公司发起并开源g表示Google公司RPC表示远程调用 2.2 特点gRPC特点 提供几乎所有主流语言的实现打破语言隔阂基于HTTP/2开放协议收到广泛的支持易于实现和集成默认使用ProtocolBuffers序列化性能相较于RESTfulJson好很多工具链成熟代码生成便捷开箱即用支持双向流式的请求和响应对批量处理、低延时场景友好 2.3.NET生态对gRPC的支持情况 提供基于HttpClient的原生框架实现提供原生的ASP.NETCore集成库提供完整的代码生成工具Visual Studio和Visual Studio Code提供proto文件的只能提示 2.4 服务端核心包 Grpc.AspNetCore 2.5 客户端核心包 Google.Protobuf ⇒ 序列化协议包Grpc.Net.Client ⇒ 客户端包Grpc.Net.ClientFactory ⇒ 与HttpClientFactory集成的包Grpc.Tools ⇒ 提供命令行工具使用的包 2.5 .proto文件 定义包、库名定义服务“service”定义输出和输入模型“message” 2.6 gRPC异常处理 使用Grpc.Core.RpcException使用Grpc.Core.Interceptors.Interceptor RpcException支持拦截器可以通过注入拦截器处理异常 2.7 gRPC与HTTPS证书 使用自制证书使用非加密的HTTP2 服务端 // order.proto文件定义 **核心** syntax proto3;// 定义proto协议类型为proto3 // 定义命名空间为GrpcServices option csharp_namespace GrpcServices; package GrpcServices;// 定义服务OrderGrpc service OrderGrpc {rpc CreateOrder(CreateOrderCommand) returns (CreateOrderResult); }// 定义输入输出响应需要为每个字段定义顺序这也是序列化时候的顺序 // 序列化时是根据数据类型和顺序识别字段的值 message CreateOrderCommand {string buyerId 1;int32 productId 2;double unitPrice 3;double discount 4;int32 units 5; }message CreateOrderResult {int32 orderId 1; }// 定义OrderService public class OrderService : OrderGrpc.OrderGrpcBase {public override TaskCreateOrderResult CreateOrder(CreateOrderCommand request, ServerCallContext context){throw new System.Exception(order error);//添加创建订单的内部逻辑录入将订单信息存储到数据库return Task.FromResult(new CreateOrderResult { OrderId 24 });}} // 注册gRPC服务 public void ConfigureServices(IServiceCollection services) {services.AddGrpc(options {options.EnableDetailedErrors true;// 内部错误信息输出设置生产环境不对外输出options.Interceptors.AddExceptionInterceptor();// 添加的异常拦截器}); }public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseEndpoints(endpoints {endpoints.MapGrpcServiceOrderService();endpoints.MapGet(/, async context {await context.Response.WriteAsync(Hello World!);});});} 定义好order.proto文件那么会自动生成服务端代码,生成的代码在项目目录的obj文件夹下的Order.cs和OrderGrpc.cs 客户端 将服务端的order.proto文件引入客户端可以基于proto文件生成客户端代码 // startuppublic void ConfigureServices(IServiceCollection services){//允许使用不加密的HTTP/2协议//AppContext.SetSwitch(System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport, true);// 注册OrderGrpcClient// OrderGrpcClient文件是由order.proto文件生成的services.AddGrpcClientOrderGrpc.OrderGrpcClient(options {options.Address new Uri(https://localhost:5001);}).ConfigurePrimaryHttpMessageHandler(provider {var handler new SocketsHttpHandler();handler.SslOptions.RemoteCertificateValidationCallback (a, b, c, d) true; //允许无效、或自签名证书return handler;}).AddTransientHttpErrorPolicy(p p.WaitAndRetryForeverAsync(i TimeSpan.FromSeconds(i * 3)));} 2.8 gRPC命令行工具 2.8.1 工具核心包 Grpc.Tools ⇒ 工程需要引用的工具dotnet-grpc ⇒ 命令行工具是.net命令行的工具插件 2.8.2 核心命令 dotnet grpc add-file ⇒ 将指定目录下的proto文件添加到工程中dotnet grpc add-url ⇒ 将一个HTTP的URL地址指定的proto文件添加到我们的工程中dotnet grpc remove ⇒ 将添加的proto文件的引用移除文件不会移除dotnet grpc refresh ⇒ 更新proto文件 2.8.3 最佳实践 使用单独的Git仓库管理proto文件使用submodule将proto文件集成到工程目录中使用dotnet-grpc命令行添加proto文件及相关依赖包引用 备注 由proto生成的代码文件会存放在obj目录中不会被签入到Git仓库
- 上一篇: 宝安住房和建设局网站电话科技公司名称大全
- 下一篇: 宝坻做网站哪家好深圳网站建设联华
相关文章
-
宝安住房和建设局网站电话科技公司名称大全
宝安住房和建设局网站电话科技公司名称大全
- 技术栈
- 2026年03月21日
-
宝安中心网站建设用手机免费制作app软件有哪些
宝安中心网站建设用手机免费制作app软件有哪些
- 技术栈
- 2026年03月21日
-
宝安网站优化微商软件商城总站
宝安网站优化微商软件商城总站
- 技术栈
- 2026年03月21日
-
宝坻做网站哪家好深圳网站建设联华
宝坻做网站哪家好深圳网站建设联华
- 技术栈
- 2026年03月21日
-
宝丰网站制作公司专注番禺网站优化
宝丰网站制作公司专注番禺网站优化
- 技术栈
- 2026年03月21日
-
宝洁公司网站建设现状榆林网站优化
宝洁公司网站建设现状榆林网站优化
- 技术栈
- 2026年03月21日






