91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在ASP.NET Core中引入gRPC服務模板

發布時間:2021-05-10 16:23:36 來源:億速云 閱讀:178 作者:Leah 欄目:開發技術

怎么在ASP.NET Core中引入gRPC服務模板?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

ASP.NET 是什么

ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。

gRPC的簡單介紹

gRPC 是一種與語言無關的高性能遠程過程調用 (RPC) 框架。 有關 gRPC 基礎知識的詳細信息,請參閱 gRPC 文檔頁。

gRPC 的主要優點是:

  • 現代高性能輕量級 RPC 框架。

  • 協定優先 API 開發,默認使用協議緩沖區,允許與語言無關的實現。

  • 可用于多種語言的工具,以生成強類型服務器和客戶端。

  • 支持客戶端、服務器和雙向流式處理調用。

  • 使用 Protobuf 二進制序列化減少對網絡的使用。

這些優點使 gRPC 適用于:

  • 效率至關重要的輕量級微服務。

  • 需要多種語言用于開發的 Polyglot 系統。

  • 需要處理流式處理請求或響應的點對點實時服務。

ASP.NET Core 3.0上gRPC服務模板初體驗

創建gRPC服務

        1 .打開VS2019 從 Visual Studio“文件”菜單中選擇“新建” > “項目”。(由于我是新打開的VS,所以按照如下圖所示創建新項目)

怎么在ASP.NET Core中引入gRPC服務模板

        2.如下圖所示,選擇創建《ASP.NET Core Web 應用程序》,然后點擊下一

怎么在ASP.NET Core中引入gRPC服務模板

        3.在此頁面按照下圖所示,輸入項目名稱,位置,解決方案名稱,然后點擊右下角的“創建”按鈕進行創建。

怎么在ASP.NET Core中引入gRPC服務模板

        4.你以為上述步驟中點擊“創建”就結束了嘛?說好的要創建gRPC服務模板的,所以,點擊上面的創建后會彈出如下圖所示,讓你選擇服務模板的窗口,這里按照下圖所示選擇gRPC服務模板,然后再次點擊右下角的創建,才是真正的創建項目。

怎么在ASP.NET Core中引入gRPC服務模板

        5.創建成功后,會出現如下圖所示的項目結構

怎么在ASP.NET Core中引入gRPC服務模板

        6.至此,我們就創建好了一個gRPC服務的模板,接下來我們先測試一番,然后再好好的看下這個模板的結構吧

測試gRPC服務

        1.首先打開HelloGrpc.Server 這個服務端的工作目錄,然后Shift+鼠標右鍵彈出如下圖所示的右鍵菜單,如圖所示打開ps窗口

怎么在ASP.NET Core中引入gRPC服務模板

        2.輸入dotnet run 命令運行此gRPC服務端項目,如下圖所示,說明服務端啟動正常,并開始監聽對應的端口。

怎么在ASP.NET Core中引入gRPC服務模板

        3.同樣的方法,我們啟動客戶端,這時候客戶端會向該服務端發送一條包含具有其名稱“GreeterClient”的消息的問候信息。 該服務端將發送一條消息“Hello GreeterClient”作為響應,并顯示在命令提示符中。如下圖所示:

怎么在ASP.NET Core中引入gRPC服務模板

        4.至此,gRPC服務模板創建的服務端以及客戶端測試成功。下面我們就好好的探究一下這個服務模板吧。

gRPC模板解析

HelloGrpc.Server 服務的端項目中有如下幾個文件

  • greet.proto:greet.proto 文件定義 Greeter gRPC,且用于生成 gRPC 服務器資產。

  • Services 文件夾:包含 Greeter 服務的實現。

  • appSettings.json:包含配置數據,如 Kestrel 使用的協議。(熟悉ASP.NET Core的你一定很熟悉)

  • Program.cs:包含 gRPC 服務的入口點。(熟悉ASP.NET Core的你一定很熟悉)

  • Startup.cs:IWebHostBuilder的啟動配置文件,包含配置應用行為的代碼。(熟悉ASP.NET Core的你一定很熟悉)

gRPC 客戶端 HelloGrpc.Client 文件:

Program.cs 包含 gRPC 客戶端的入口點和邏輯。

下面我們再打開每個文件看看里面究竟是什么東東吧。

proto文件

proto

GRPC使用約定優先的API開發方法。默認情況下,使用協議緩沖區(Protobuf)作為接口設計語言(IDL)。這個.proto文件包含:

  • GRPC服務的定義。

  • 在客戶端和服務器之間發送的消息。

有關Protobuf文件語法的更多信息,請參見正式文件(原型).

如我們模板中創建的greet.proto 文件內容如下:

syntax = "proto3";

package Greet;

// The greeting service definition.
service Greeter {
 // Sends a greeting
 rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
 string name = 1;
}

// The response message containing the greetings.
message HelloReply {
 string message = 1;
}
  • 定義Greeter服務。

  • 這個Greeter服務定義SayHello請求。

  • SayHello發送HelloRequest消息并接收HelloResponse信息:

  • 那么你可能要問了,這個.proto文件是如何包含在項目中的呢,其實,如果你打開.csproject文件就會看到,通過將該文件添加到<Protobuf>的ItemGroup中即可,如下所示:

<ItemGroup>
 <Protobuf Include="..\Protos\*.proto" GrpcServices="Server" />
 <Content Include="@(Protobuf)" LinkBase="" />
</ItemGroup>

C#對.proto文件的工具支持

工具包Grpc.Tools 被用來從.proto文件生成C#文件。生成的資產(文件)具有如下特性:

  • 每次構建項目時都會根據需要進行生成。

  • 生成的文件不會被添加到項目或簽入源代碼管理。

  • 生成的C#文件是包含在OBJ目錄。

服務器和客戶端項目都需要此包。Grpc.Tools可以通過在VisualStudio中使用包管理器或添加<PackageReference>到項目文件:

XML復制

<PackageReference Include="Grpc.Tools" Version="1.19.0-pre1" PrivateAssets="All" />

工具包在運行時并不是必需的,因此,應該用PrivateAssets="All".

Services 文件夾中的具體的gRPC服務

我們知道Grpc.Tools工具包將根據.proto文件的定義翻譯并生成對應的C#類型的文件。

對于服務器端資產,將生成一個抽象的服務基類型。基類型包含在.proto文件中包含的所有GRPC調用的定義。然后,您將創建從此基類型派生的具體服務實現,并實現GRPC調用的邏輯。對于前面描述的greet.proto示例,將生成包含虛擬SayHello方法的抽象GreeterBase類型。具體的實現GreeterService重寫該方法并實現處理GRPC調用的邏輯。
正如HelloGrpc.Server項目中的Services\GreeterService.cs中的代碼

public class GreeterService : Greeter.GreeterBase
{
 public override Task<HelloReply> 
 SayHello(HelloRequest request, ServerCallContext context)
 {
 return Task.FromResult(new HelloReply
 {
  Message = "Hello " + request.Name
 });
 }
}

對于客戶端,將生成一個具體的客戶端類型中的GRPC調用。.proto文件被轉換為可以調用的具體類型上的方法。為greet.proto前面描述的示例,一個具體的GreeterClient類型生成。這個GreeterClient類型包含SayHello方法,可以調用該方法來啟動對服務器的GRPC調用。

public class Program
{
 static async Task Main(string[] args)
 {
 // Include port of the gRPC server as an application argument
 var port = args.Length > 0 ? args[0] : "50051";

 var channel = new Channel("localhost:" + port, ChannelCredentials.Insecure);
 var client = new Greeter.GreeterClient(channel);

 var reply = await client.SayHelloAsync(
     new HelloRequest { Name = "GreeterClient" });
 Console.WriteLine("Greeting: " + reply.Message);

 await channel.ShutdownAsync();

 Console.WriteLine("Press any key to exit...");
 Console.ReadKey();
 }
}

默認情況下,分別生成服務器和客戶端資產。.proto文件包含在<Protobuf>項目組。若要確保僅在服務器項目中生成服務器資產,GrpcServices屬性設置為Server.

XML復制

<ItemGroup>
 <Protobuf Include="..\Protos\*.proto" GrpcServices="Server" />
 <Content Include="@(Protobuf)" LinkBase="" />
</ItemGroup>

類似地,屬性設置為Client在僅在客戶項目中生成。

Startup

Startup中我們發現跟普通的ASP.NET Core程序有所不同,具體的如下圖所示:在ConfigureServices 服務中引入了gRPC服務,然后在Configure加入了路由

怎么在ASP.NET Core中引入gRPC服務模板

而這里需要引入三個與gRPC相關的nuget包

  • Grpc.AspNetCore.Server

  • Google.Protobuf對于Protobuf消息API。

  • Grpc.Tools

這里需要說明的是

ASP.NET Core 中間件和功能共享路由管道,因此可以將應用程序配置為服務其他請求處理程序。其他請求處理程序(如MVC控制器)可以與配置的GRPC服務路由并行工作。

其他需要說明的內容

與ASP.NET Core 接口的集成

GRPC服務可以完全訪問ASP.NETCore功能,如依賴注入(Di)和日志功能。例如,服務實現可以通過構造函數解析DI容器中的記錄器服務:

public class GreeterService : Greeter.GreeterBase
{
 public GreeterService(ILogger<GreeterService> logger)
 {
 }
}

默認情況下,GRPC服務可以解析具有任意生存期的其他DI服務(Singleton, Scoped, or Transient)。

在GRPC方法中解析HttpContext

GRPC 應用程序接口提供對某些HTTP/2消息數據的訪問,例如method, host, header, and trailers。訪問是通過ServerCallContext參數傳遞給每個GRPC方法:

public class GreeterService : Greeter.GreeterBase
{
 public override Task<HelloReply> 
 SayHello(HelloRequest request, ServerCallContext context)
 {
 return Task.FromResult(new HelloReply
 {
  Message = "Hello " + request.Name
 });
 }
}

ServerCallContext不提供對所有ASP.NET 接口中HttpContext的完全訪問。GetHttpContext擴展方法提供對表示ASP.NET API中底層HTTP/2消息的httpContext的完全訪問:

public class GreeterService : Greeter.GreeterBase
{
 public override Task<HelloReply> SayHello(HelloRequest request, 
 ServerCallContext context)
 {
 var httpContext = context.GetHttpContext();

 return Task.FromResult(new HelloReply
 {
  Message = "Using https: " + httpContext.Request.IsHttps
 });
 }
}

請求體數據速率限制

默認情況下,Kestrel服務器設置為最小請求主體數據速率。對于客戶端流式和雙工流式的請求,此速率可能不滿足,并且連接可能超時。當GRPC服務包括客戶端流和雙工流調用時,必須禁用最小請求正文數據速率限制:

public class Program
{
 public static void Main(string[] args)
 {
 CreateHostBuilder(args).Build().Run();
 }

 public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
 .ConfigureWebHostDefaults(webBuilder =>
 {
 webBuilder.UseStartup<Startup>();
 webBuilder.ConfigureKestrel((context, options) =>
 {
  options.Limits.MinRequestBodyDataRate = null;
 });
 });
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保德县| 唐山市| 成安县| 册亨县| 收藏| 普兰县| 醴陵市| 高淳县| 姚安县| 天台县| 海南省| 西城区| 闸北区| 九龙坡区| 托克逊县| 金华市| 团风县| 宾阳县| 吴忠市| 六枝特区| 疏勒县| 克山县| 赞皇县| 娱乐| 华阴市| 堆龙德庆县| 濮阳市| 公主岭市| 五大连池市| 星座| 沙雅县| 长岛县| 诏安县| 太谷县| 甘洛县| 文登市| 东丰县| 新营市| 长泰县| 潞西市| 克拉玛依市|