grpc(Login hyperlink terlihat.) adalah kerangka kerja RPC (Remote Procedure Call) sumber terbuka, berperforma tinggi, dan tujuan umum yang dirilis oleh Google, menggunakan protokol HTTP/2, mendukung multiplexing, dan menggunakan ProtoBuf sebagai alat serialisasi untuk memberikan dukungan lintas bahasa dan lintas platform. gRPC adalah kerangka kerja panggilan prosedur jarak jauh (RPC) berkinerja tinggi yang agnostik bahasa.
Manfaat utama gRPC adalah:
- Kerangka kerja RPC modern, berkinerja tinggi, dan ringan.
- Pengembangan API yang mengutamakan kontrak yang menggunakan buffer protokol secara default, memungkinkan implementasi agnostik bahasa.
- Alat tersedia dalam berbagai bahasa untuk menghasilkan server dan klien yang diketik dengan kuat.
- Mendukung panggilan klien, server, dan streaming dua arah.
- Kurangi penggunaan jaringan dengan serialisasi biner Protobuf.
Artikel ini dimulai dengan . Net Core menggunakan protokol gRPC untuk komunikasi sisi klien dan sisi server.
Membuat server gRPC
Luncurkan Visual Studio dan pilih Buat Proyek Baru. Atau, pilih Proyek > Baru dari menu File Visual Studio.
Dalam kotak dialog Buat Proyek Baru, pilih Layanan gRPC, lalu pilih Berikutnya:
Setelah pembuatan selesai, seperti yang ditunjukkan pada gambar berikut:
Membuat klien gRPC
Buka instans kedua Visual Studio dan pilih Buat proyek baru. Dalam kotak dialog Buat Proyek Baru, pilih Aplikasi Konsol (.NET Core), lalu pilih Berikutnya. Di kotak teks Nama, masukkan gRPC-Client, lalu pilih Buat.
Tambahkan paket yang diperlukan
Proyek klien gRPC memerlukan paket berikut: Grpc.Net.Client, yang berisi klien .NET Core. Google.Protobuf berisi pesan Protobuf untuk C#. Grpc.Tools menyertakan dukungan alat C# untuk file Protobuf. Toolkit tidak diperlukan saat runtime, sehingga dependensi ditandai sebagai PrivateAssets="All".
Tambahkan greet.proto
Buat folder Protos di proyek klien gRPC Anda. Salin file Protos\greet.proto dari layanan Penyambut gRPC ke proyek klien gRPC.
Edit file proyek gRPC-Client.csproj, tambahkan grup item dengan elemen yang mereferensikan file greet.proto <Protobuf> :
Membuat klien Greeter
Perbarui file Program.cs klien gRPC dengan kode berikut:
Buat instance GrpcChannel sehingga berisi informasi yang digunakan untuk membuat koneksi ke layanan gRPC. Buat klien Greeter menggunakan GrpcChannel. Klien Greeter memanggil metode SayHello. Hasil panggilan SayHello ditampilkan.
Buat komunikasi file .proto Anda sendiri
Buat file userinfo.proto baru di bawah folder Protos layanan, yang didefinisikan sebagai berikut:
gRPC menggunakan pendekatan mengutamakan kontrak untuk pengembangan API. Tentukan layanan dan pesan dalam file *.proto.
Edit file proyek GrpcService1.csproj, tambahkan <Protobuf> grup item dengan elemen yang mereferensikan file userinfo.proto:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup>
<ItemGroup> <Protobuf include="protos\greet.proto" grpcServices="server" /> <Protobuf include="protos\userinfo.proto" grpcServices="server" /> </ItemGroup>
<ItemGroup> <PackageReference include="Grpc.AspNetCore" version="2.23.1" /> </ItemGroup>
</Project>
Buat file UserInfoService.cs baru di bawah folder Layanan, kodenya adalah sebagai berikut:
Daftarkan layanan UserInfoService di Startup.cs dengan kode berikut:
Mengesampingkan klien, tentu saja, Anda perlu menyalin file userinfo.proto sebelumnya, dan kodenya adalah sebagai berikut:
Nilai pengembalian:
Halo dunia! Jawaban : Halo itsvse.com { "id": "1", "name": "arsitek", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Pengecualian yang tidak ditangani. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Tidak ada pesan yang dikembalikan dari metode.") di Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode '2, host String, opsi CallOptions, permintaan TRequest) di Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) di Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Permintaan TRequest, ClientInterceptorContext'2 konteks, kelanjutan BlockingUnaryCallContinuation'2) di Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode '2, host String, opsi CallOptions, permintaan TRequest) di UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, opsi CallOptions) di C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs: baris 62 di UserInfo.UserInfoClient.GetUserInfo(permintaan GetUserInfoRequest, header Metadata, tenggat waktu Nullable'1, CancellationToken cancellationToken) di C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 di gRPC_Client.Program.Main(String[] args) di C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Silakan tekan tombol apa saja untuk melanjutkan. . . .
Ketika nilai yang ditampilkan adalah null, klien melemparkan pengecualian.
Pemain biola mengambil tasnya
Untuk mencoba menggunakan Fiddler untuk menangkap paket, pertama-tama siapkan proxy pada klien sebagai berikut (pada kenyataannya, Anda tidak dapat mengaturnya, cukup buka Fiddler secara langsung):
Kesalahan di sisi server:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 melalui TLS tidak dinegosiasikan pada titik akhir khusus HTTP/2. Kesalahan klien:
Pengecualian yang tidak ditangani. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Respons gRPC yang buruk. Protokol respons diturunkan ke HTTP/1.1.") di Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode '2, host String, opsi CallOptions, permintaan TRequest) di Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) di Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Permintaan TRequest, ClientInterceptorContext'2 konteks, kelanjutan BlockingUnaryCallContinuation'2) di Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode '2, host String, opsi CallOptions, permintaan TRequest) di UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, opsi CallOptions) di C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs: baris 62 di UserInfo.UserInfoClient.GetUserInfo(permintaan GetUserInfoRequest, header Metadata, tenggat waktu Nullable'1, CancellationToken cancellationToken) di C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 di gRPC_Client.Program.Main(String[] args) di C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Silakan tekan tombol apa saja untuk melanjutkan. . . .
Alamat POST: https://localhost:5001/UserInfo/GetUserInfo
Isi:
Host: localhost:5001
User-Agent: grpc-dotnet/2.25.0.0
TE: trailers
grpc-accept-encoding: identity,gzip
Content-Type: application/grpc
Content-Length: 7
Fiddler-Encoding: base64
Terakhir, lampirkan kode sumber:
Wisatawan, jika Anda ingin melihat konten tersembunyi dari posting ini, silakan Jawab
(Akhir)
|