Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 59053|Jawab: 9

[Inti .NET] Pertarungan praktis: ASP.NET Core menggunakan komunikasi gRPC

[Salin tautan]
Diposting pada 11/11/2019 10.55.26 | | | |
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, silakanJawab


(Akhir)




Mantan:Penyempurnaan Programmer: Dari Pemula hingga Insinyur PDF Lengkap
Depan:100 musik pot lossless
Diposting pada 11/11/2019 17.46.30 |
ASP.NET Core menggunakan komunikasi gRPC
Diposting pada 28/11/2019 15.14.53 |
ASP.NET Core menggunakan komunikasi gRPC
Diposting pada 28/11/2019 15.15.25 |
ASP.NET Core menggunakan komunikasi gRPC
Diposting pada 02/12/2020 15.52.18 |
Bagaimana Anda menyelesaikan kesalahan terakhir ini?
Diposting pada 07/12/2020 20.37.56 |
menggunakan Grpc.Core;
menggunakan Microsoft.Extensions.Logging;
menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Threading.Tasks;

namespace GrpcService1
{
    kelas publik UserInfoService : UserInfo.UserInfoBase
    {
        ILogger bacaan pribadi<UserInfoService> _logger;
        Daftar statis pribadi<UserInfoReply> userInfoReplies = Daftar baru<UserInfoReply>();
        UserInfoService statis()
        {
            userInfoReplies.Add(UserInfoReply() baru
            {
                Id = 1,
                Nama = "Arsitek",
                Usia = 5,
                IsVip = benar
            });
            userInfoReplies.Add(UserInfoReply() baru
            {
                ID = 2,
                Nama = "itsvse.com",
                Usia = 5,
                IsVip = salah
            });
            userInfoReplies.Add(UserInfoReply() baru
            {
                ID = 3,
                Nama = "Sampah Kecil",
                Usia = 1,
                IsVip = salah
            });
        }
        UserInfoService publik (ILogger<UserInfoService> logger)
        {
            _logger = penebang;
        }

        penggantian publik Task<UserInfoReply> GetUserInfo(permintaan GetUserInfoRequest, konteks ServerCallContext)
        {
            mengembalikan Task.Run(() =>
            {
                mengembalikan permintaan userInfoReplies.SingleOrDefault(x => x.Id ==. Id);
            });
        }
    }
}
Diposting pada 07/12/2020 21.06.17 |
di System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   di System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Tugas tugas)
   di System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Tugas tugas)
   di System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   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)
Diposting pada 25/05/2021 11.37.34 |
Ditulis dengan sangat baik, pujian dan pujian
Diposting pada 05/06/2021 11.45.21 |
ASP.NET Core menggunakan komunikasi gRPC
 Tuan tanah| Diposting pada 13/08/2025 15.25.35 |
Menggunakan Postman untuk menguji (men-debug) layanan gRPC
https://www.itsvse.com/thread-11053-1-1.html
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com