Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 59053|Yanıt: 9

[.NET Core] Pratik dövüş: ASP.NET Core gRPC iletişimi kullanır

[Bağlantıyı kopyala]
Yayınlandı 11.11.2019 10:55:26 | | | |
Grpc(Bağlantı girişi görünür.), Google tarafından yayımlanan, HTTP/2 protokolünü kullanan, çoklamayı destekleyen ve ProtoBuf'u serileştirme aracı olarak kullanan, açık kaynaklı, yüksek performanslı, genel amaçlı bir RPC (Uzaktan İşlem Çağrısı) çerçevesidir.
gRPC, dil bağımsız yüksek performanslı uzaktan işlem çağrısı (RPC) çerçevesidir.

gRPC'nin başlıca faydaları şunlardır:

  • Modern, yüksek performanslı, hafif RPC çerçevesi.
  • Varsayılan olarak protokol tamponlarını kullanan, dil bağımsız uygulamalara olanak tanıyan sözleşme öncelikli API geliştirme.
  • Güçlü tipli sunucular ve istemci oluşturmak için birden fazla dilde mevcut araçlar.
  • İstemci, sunucu ve iki yönlü akış çağrılarını destekler.
  • Protobuf ikili serileştirme ile ağın kullanımını azaltın.


Bu makale ile başlar. Net Core, istemci tarafı ve sunucu tarafı iletişimi için gRPC protokolünü kullanır.

Bir gRPC sunucusu oluşturun

Visual Studio'yu başlatın ve Yeni Proje Oluştur'u seçin. Alternatif olarak, Visual Studio Dosya menüsünden Yeni > Projesi'ni seçin.

Yeni Proje Oluştur diyalog kutusunda gRPC Hizmeti'ni seçin ve ardından Sonraki'yi seçin:




Yaratım tamamlandıktan sonra, aşağıdaki şekilde gösterildiği gibi:




Bir gRPC istemcisi oluşturun

Visual Studio'nun ikinci bir örneğini açın ve Yeni bir proje oluştur'u seçin.
Yeni Proje Oluştur iletişim kutusunda Konsol Uygulaması (.NET Core) seçin ve ardından Sonraki'yi seçin.
Ad metin kutusuna gRPC-Client girin ve ardından Oluştur seçeneğini seçin.


Gerekli paketi ekleyin

gRPC istemci projesi aşağıdaki paketleri gerektirir:
Grpc.Net.Client, .NET Core istemcisini içerir.
Google.Protobuf, C# için Protobuf mesajları içerir.
Grpc.Tools, Protobuf dosyaları için C# araç desteği içerir. Araç kiti çalışma zamanında gerekli değildir, bu yüzden bağımlılıklar PrivateAssets="All" olarak işaretlenir.




greet.proto ekle

gRPC istemci projenizde bir Protos klasörü oluşturun.
Protos\greet.proto dosyasını gRPC Greeter hizmetinden gRPC istemci projesine kopyalayın.

gRPC-Client.csproj proje dosyasını düzenleyin, greet.proto dosyasına referans veren öğeyle öğe <Protobuf> grubunu ekleyin:





Bir Greeter istemcisi oluştur

gRPC istemcisinin Program.cs dosyasını aşağıdaki kodla güncelleyin:





GrpcChannel'ı, gRPC servisine bağlantı oluşturmak için kullanılan bilgileri içerecek şekilde başlatın.
GrpcChannel kullanarak bir Greeter istemcisi oluşturun.
Greeter müşterisi SayHello yöntemini çağırıyor. SayHello görüşmesinin sonucu gösterilir.




Kendi .proto dosya iletişiminizi oluşturun

Servisin Protos klasörü altında yeni bir userinfo.proto dosyası oluşturun, aşağıdaki şekilde tanımlanır:


gRPC, API geliştirme için sözleşme öncelikli yaklaşım kullanır. *.proto dosyasında servisleri ve mesajları tanımlayın.

GrpcService1.csproj proje dosyasını düzenleyin, <Protobuf> userinfo.proto dosyasına referans veren öğeyle öğe grubunu ekleyin:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>NetcoreApp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf include="Protos\greet.proto" GrpcServices="sunucu" />
    <Protobuf include="Protos\userinfo.proto" GrpcServices="sunucu" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference include="Grpc.AspNetCore" version="2.23.1" />
  </ItemGroup>

</Project>


Hizmetler klasörü altında yeni bir UserInfoService.cs dosyası oluşturun, kod şu şekildedir:

UserInfoService hizmetini Startup.cs tarihinde aşağıdaki kodla kaydedin:

Elbette istemciyi bir kenara bırakırsak, userinfo.proto dosyasını geçmişe kopyalamanız gerekir ve kod şöyledir:

İade değeri:

Merhaba Dünya!
Yanıt: Merhaba itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Çözülemeyen istisna. Grpc.Core.RpcException: Status(StatusCode=İptal, Detay="Metoddan mesaj geri dönmedi.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metod, String host, CallOptions options, TRequest request)
   Grpc.Core.Interceptors.InterceptingCallInvoker adresinde. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 bağlam, BlockingUnaryCallContinuation'2 devamı)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodu, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:hat 62
   at UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   at gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Lütfen devam etmek için herhangi bir tuşa basın. . . .


Geri dönüş değeri null olduğunda, istemci bir istisna atar.


Fiddler çantayı kap

Fiddler'ı paket yakalamak için denemek için, önce istemci üzerinde proxy'yi şu şekilde ayarlayın (aslında kuramazsınız, sadece Fiddler'ı doğrudan açın):

Sunucu tarafında hata:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      TLS üzerinden HTTP/2, yalnızca HTTP/2 ile bağlantılı bir uç noktada müzakere edilmedi.
İstemci hatası:

Çözülemeyen istisna. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Kötü gRPC yanıtı. Yanıt protokolü HTTP/1.1'e düşürüldü.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metod, String host, CallOptions options, TRequest request)
   Grpc.Core.Interceptors.InterceptingCallInvoker adresinde. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 bağlam, BlockingUnaryCallContinuation'2 devamı)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodu, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:hat 62
   at UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   at gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Lütfen devam etmek için herhangi bir tuşa basın. . . .


POSTA ADRESİ: https://localhost:5001/UserInfo/GetUserInfo

İçerik:

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


Son olarak, kaynak kodunu ekleyin:

Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfenYanıt


(Son)




Önceki:Programcının Geliştirmesi: Yeni Başlayandan Mühendise Tam PDF
Önümüzdeki:100 kayıpsız çem müziği
Yayınlandı 11.11.2019 17:46:30 |
ASP.NET Core, gRPC iletişimi kullanır
Yayınlandı 28.11.2019 15:14:53 |
ASP.NET Core, gRPC iletişimi kullanır
Yayınlandı 28.11.2019 15:15:25 |
ASP.NET Core, gRPC iletişimi kullanır
Yayınlandı 2.12.2020 15:52:18 |
Bu son hatayı nasıl çözdünüz?
Yayınlandı 7.12.2020 20:37:56 |
Grpc.Core kullanarak;
Microsoft.Extensions.Logging kullanılarak;
System kullanmak;
System.Collections.Generic kullanılarak;
System.Linq kullanarak;
System.Threading.Tasks kullanılarak;

isim alanı GrpcService1
{
    public class UserInfoService : UserInfo.UserInfoBase
    {
        özel okunabilir<UserInfoService> ILogger _logger;
        özel statik List<UserInfoReply> userInfoReplies = yeni List<UserInfoReply>();
        statik UserInfoService()
        {
            userInfoReplies.Add(yeni UserInfoReply()
            {
                Id = 1,
                İsim = "Mimar",
                Yaş = 5,
                IsVip = doğru
            });
            userInfoReplies.Add(yeni UserInfoReply()
            {
                Id = 2,
                İsim = "itsvse.com",
                Yaş = 5,
                IsVip = yanlış
            });
            userInfoReplies.Add(yeni UserInfoReply()
            {
                Id = 3,
                İsim = "Küçük",
                Yaş = 1,
                IsVip = yanlış
            });
        }
        public UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = oduncu;
        }

        public override Görev<UserInfoReply> GetUserInfo(GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return: userInfoReplies.SingleOrDefault(x => x.Id == request. Id);
            });
        }
    }
}
Yayınlandı 7.12.2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Görev görevi)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Görev görevi)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metod, String host, CallOptions options, TRequest request)
   Grpc.Core.Interceptors.InterceptingCallInvoker adresinde. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 bağlam, BlockingUnaryCallContinuation'2 devamı)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodu, String host, CallOptions options, TRequest request)
Yayınlandı 25.05.2021 11:37:34 |
Gerçekten çok iyi yazılmış, övgü ve övgü
Yayınlandı 5.06.2021 11:45:21 |
ASP.NET Core, gRPC iletişimi kullanır
 Ev sahibi| Yayınlandı 13.08.2025 15:25:35 |
Postman'ı kullanarak gRPC servisini test etmek (hata ayıklama) yapmak için kullanın
https://www.itsvse.com/thread-11053-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com