gRPC لـ C# (.NET): المكتبات وأمثلة الاستخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

gRPC لـ C# (.NET): المكتبات وأمثلة الاستخدام

\n\n

gRPC هو إطار عمل عالي الأداء لاستدعاء الإجراءات عن بُعد (RPC) من Google، يعتمد على HTTP/2 و Protocol Buffers (protobuf). في نظام .NET البيئي، أصبح gRPC المعيار الفعلي للتواصل بين الخدمات المصغرة، مما يوفر كتابة صارمة للأنواع، ونقل ثنائي الاتجاه، وزمن انتقال منخفض. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع gRPC في C# ونقدم أمثلة عملية لإعداد الخادم والعميل.

\n\n

المكتبات الأساسية لـ gRPC في .NET

\n\n

للعمل مع gRPC في .NET، تُستخدم الحزم التالية من NuGet:

\n\n
    \n
  • Grpc.AspNetCore — دمج خادم gRPC في ASP.NET Core (موصى به للاستضافة).
  • \n
  • Grpc.Net.Client — مكتبة العميل لـ .NET (بما في ذلك .NET Core، .NET 5+).
  • \n
  • Grpc.Tools — مولد الكود من ملفات .proto (يُضاف كعنصر Protobuf في ملف .csproj).
  • \n
  • Google.Protobuf — العمل مع رسائل protobuf.
  • \n
\n\n

جميع هذه الحزم مدعومة من Microsoft ويتم تطويرها بنشاط. يتم التثبيت عبر NuGet Package Manager أو واجهة سطر الأوامر dotnet CLI:

\n\n
dotnet add package Grpc.AspNetCore\ndotnet add package Grpc.Net.Client\ndotnet add package Google.Protobuf\ndotnet add package Grpc.Tools
\n\n

إنشاء خادم gRPC بلغة C#

\n\n

لننظر في إنشاء خدمة بسيطة للعمل مع الطلبات خطوة بخطوة.

\n\n

1. تعريف ملف proto

\n

أنشئ ملفًا باسم order.proto في مشروع الخادم (مثل GrpcServer):

\n\n
syntax = "proto3";\n\nservice OrderService {\n    rpc GetOrder (OrderRequest) returns (OrderResponse);\n    rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);\n}\n\nmessage OrderRequest {\n    int32 order_id = 1;\n}\n\nmessage OrderResponse {\n    int32 order_id = 1;\n    string status = 2;\n    double total = 3;\n}
\n\n

2. إعداد ملف .csproj لتوليد الكود

\n

أضف إلى ملف .csproj:

\n\n
<ItemGroup>\n    <Protobuf Include="order.proto" GrpcServices="Server" />\n</ItemGroup>
\n\n

3. تنفيذ الخدمة

\n

أنشئ فئة ترث من الفئة الأساسية المُنشأة:

\n\n
public class OrderServiceImpl : OrderService.OrderServiceBase\n{\n    public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)\n    {\n        return Task.FromResult(new OrderResponse\n        {\n            OrderId = request.OrderId,\n            Status = "Shipped",\n            Total = 99.99\n        });\n    }\n\n    public override async Task SubscribeOrders(OrderRequest request, \n        IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context)\n    {\n        for (int i = 0; i < 5; i++)\n        {\n            await responseStream.WriteAsync(new OrderResponse\n            {\n                OrderId = request.OrderId,\n                Status = $"Update #{i}",\n                Total = 100 + i * 10\n            });\n            await Task.Delay(1000);\n        }\n    }\n}
\n\n

4. التسجيل في Program.cs

\n\n
var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddGrpc();\n\nvar app = builder.Build();\napp.MapGrpcService<OrderServiceImpl>();\napp.MapGet("/", () => "gRPC server is running");\napp.Run();
\n\n

إنشاء عميل gRPC بلغة C#

\n\n

الآن سننشئ تطبيق وحدة تحكم عميل (GrpcClient).

\n\n

1. التحضير

\n

انسخ ملف order.proto إلى مشروع العميل وحدد في .csproj:

\n\n
<Protobuf Include="order.proto" GrpcServices="Client" />
\n\n

2. كود العميل

\n\n
using Grpc.Net.Client;\nusing GrpcClient;\n\nvar channel = GrpcChannel.ForAddress("https://localhost:5001");\                    

توصيات