تجربة جديدة: استدعاء خدمات .NET gRPC من متصفح باستخدام gRPC-Web

يسعدنا أن نعلن عن دعم تجريبي لـ gRPC-Web مع .NET. يسمح لك gRPC-Web باستدعاء gRPC من التطبيقات المستندة إلى المستعرض مثل تطبيقات JavaScript SPA أو Blazor WebAssembly.

تتعهد gRPC-Web for .NET بجلب العديد من ميزات gRPC الرائعة إلى تطبيقات المتصفح:

  • عملاء مطبوعين بدقة على التعليمات البرمجية
  • المشاركات Protobuf المدمجة
  • دفق الخادم



ما هو gRPC-Web


لا يمكن تنفيذ مواصفات gRPC HTTP / 2 في المستعرض نظرًا لعدم وجود واجهة برمجة تطبيقات للمتصفح مع تحكم تفصيلي كافٍ في طلبات HTTP.  يحل gRPC-Web هذه المشكلة من خلال التوافق مع HTTP / 1.1 و HTTP / 2.

gRPC-Web ليست تقنية جديدة. هناك عميل جافا سكريبت gRPC-Web ثابت  ، بالإضافة إلى  وكيل للترجمة بين gRPC و gRPC-Web  للخدمات. تسمح الحزم التجريبية الجديدة لتطبيق ASP.NET Core gRPC بدعم gRPC-Web بدون خادم وكيل وتسمح لعميل .NET Core gRPC باستدعاء خدمات gRPC-Web. (رائع لتطبيقات Blazor WebAssembly!)

ميزات جديدة مع gRPC-Web


  • استدعاء تطبيقات ASP.NET Core gRPC من متصفح - لا يمكن لواجهة برمجة تطبيقات المتصفح استدعاء gRPC HTTP / 2. يقدم gRPC-Web بديلاً متوافقًا.
    • JavaScript SPA
    • تطبيقات تجميع ويب .NET Blazor
  • استضافة تطبيقات gRPC لـ ASP.NET Core في IIS وخدمة تطبيق Azure. بعض الخوادم ، مثل IIS و Azure Application Service ، غير قادرة حاليًا على استضافة خدمات gRPC. بينما يعملون بنشاط على ذلك ، تقدم gRPC-Web بديلاً مثيرًا للاهتمام يعمل اليوم في أي بيئة.
  • استدعاء gRPC من أنظمة أساسية بخلاف .NET Core. بعض الأنظمة الأساسية .NET HttpClientلا تدعم HTTP / 2. يمكن استخدام gRPC-Web لاستدعاء خدمات gRPC على هذه الأنظمة الأساسية (مثل Blazor WebAssembly ، Xamarin).

لاحظ أن أداء gRPC-Web منخفض في الأداء ولم تعد ميزتان gRPC مدعومتين: بث العميل ودفق ثنائي الاتجاه. (التدفق إلى الخادم لا يزال مدعومًا!)

تعليمات خادم ويب GRPC


إذا لم تكن قد درست gRPC في .NET بعد ، فإليك برنامج  تعليمي بسيط حتى تتمكن من البدء .

لا يتطلب gRPC-Web أي تغييرات على خدماتك ، التعديل الوحيد هو التكوين الأولي. لتمكين gRPC-Web مع خدمة ASP.NET Core gRPC ، قم بإضافة الرابط إلى حزمة Grpc.AspNetCore.Web . تكوين التطبيق لاستخدام gRPC ويب، مضيفا AddGrpcWeb(...)، و UseGrpcWeb()ملف بدء التشغيل: Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    //    gRPC-Web     
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

قد يتطلب الاتصال بـ gRPC-Web من متصفح تكوينًا إضافيًا ، على سبيل المثال ، تهيئة تطبيق لدعم CORS.

تعليمات عميل ويب GRPC


يحتوي عميل gRPC-Web JavaScript على تعليمات  لإعداد عميل gRPC-Web للاستخدام في متصفح JavaScript SPA.

يشبه استدعاء gRPC-Web مع عميل .NET gRPC العادي ، والتغيير الوحيد هو الطريقة التي يتم بها إنشاء القناة. لتمكين gRPC-Web ، أضف الرابط إلى حزمة Grpc.Net.Client.Web . قم بتكوين القناة للاستخدام GrpcWebHandler:

//     gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

لرؤية gRPC-Web مع .NET قيد التشغيل ، اقرأ أروع مشاركة مدونة لزميلنا الذين استخدموا  gRPC-Web في Blazor WebAssembly .

جرب gRPC-Web مع ASP.NET Core اليوم


حزم معاينة على NuGet:


يمكنك العثور على وثائق حول استخدام gRPC-Web مع .NET Core  هنا .

ملاحظة: في حين أن gRPC-Web for .NET ليس سوى مشروع تجريبي ، وليس منتجًا مدعومًا.

Source: https://habr.com/ru/post/undefined/


All Articles