การโฮสต์บริการ gRPC ในแอปพลิเคชัน Windows Forms

ฉันต้องการสร้างบริการ gRPC แต่ฉันต้องโฮสต์ในแอปพลิเคชัน winform .net มีตัวอย่างพิเศษของวิธีการ การโฮสต์ ASP.NET Core API ใน Windows Forms Application ฉันอยากให้ใครสักคนอธิบายให้ฉันฟังว่าฉันต้องติดตั้งอะไร และควรเปลี่ยนแปลงอะไรในตัวอย่างนี้ เพื่อโฮสต์บริการ grpc ในรูปแบบของ Windows ...


person Fabian Wesling    schedule 01.11.2020    source แหล่งที่มา
comment
คุณจะทำเหมือนกับในโพสต์นั้นทุกประการ แต่เพียงใช้จุดสิ้นสุด grpc (endpoints.MapGrpcService) เหมือนที่นี่ - docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-3.1 แทนจุดสิ้นสุด mvc อีกครั้ง - เช่นเดียวกับในโพสต์นั้น แต่เพียงแทนที่การตั้งค่า mvc ด้วยการตั้งค่า grpc เช่นเดียวกับในเอกสารอย่างเป็นทางการ   -  person Nikita Chayka    schedule 01.11.2020
comment
ลิงค์กำลังสร้างไคลเอนต์และเซิร์ฟเวอร์และเชื่อมต่อไคลเอนต์กับเซิร์ฟเวอร์ รูปแบบหน้าต่างคือไคลเอนต์และตัวควบคุมคือเซิร์ฟเวอร์ โดยปกติโครงการแบบฟอร์ม windows จะมี Startup.cs พร้อมการเรียกไปยังแบบฟอร์มที่มี [STAThread] ลิงก์กำลังเริ่มต้น WebHost ก่อนที่แบบฟอร์มจะเริ่มต้น ดังนั้นเซิร์ฟเวอร์จึงเริ่มทำงานก่อนไคลเอนต์ รหัสแบบฟอร์มปกติอยู่ในคลาสเริ่มต้นของแบบฟอร์ม ดังนั้นเมื่อคุณสร้างโปรเจ็กต์ฟอร์มใหม่ให้เพิ่มโค้ดในขั้นตอนที่ 7 ลงใน program.cs จากนั้นขั้นตอนที่ 6 จะเข้าสู่โมดูลฟอร์มหลัก   -  person jdweng    schedule 01.11.2020
comment
ขอบคุณสำหรับคำตอบ. ฉันได้ลองทำตามบทช่วยสอนแล้ว แต่ทำไม่ได้เพราะ gRPC สร้างบริการโดยอัตโนมัติและบันทึกไว้ในโฟลเดอร์ obj และฉันไม่สามารถสร้างมันขึ้นมาได้ ปัญหาอีกอย่างคือ services.AddGrpc () ใช้ส่วนขยาย ของไลบรารี Grpc.AspNetCore.Server ซึ่งเข้ากันไม่ได้กับ .net framework 4.X ดังนั้นฉันจึงเห็นว่ามันไม่รองรับอย่างเห็นได้ชัด   -  person Fabian Wesling    schedule 01.11.2020


คำตอบ (1)


คุณสามารถทำตามขั้นตอนเดียวกันแต่มีขั้นตอนเพิ่มเติมหลายประการ:

  1. ติดตั้งแพ็คเกจ Microsoft.AspNetCore.Grpc.HttpApi สิ่งนี้จะแมปจุดสิ้นสุด gRPC ของคุณกับ HTTP แบบคลาสสิก ไม่ใช่โดยอัตโนมัติ คุณจะต้องระบุบริการใน Startup.cs ดังนี้:
    app.UseEndpoints(endpoints =>
            {
                endpoints.MapGrpcService<MygRPCService>();
            });
  1. ในโปรโตของคุณ คุณต้องระบุเส้นทาง HTTP บางอย่างเช่นนี้:
     rpc Get(GetRequest) returns (GetReply) {
        option (google.api.http) = {
          get: '/my-endpoint'
          body: '*'
        };
      }
  1. เพิ่มวิธีการ Startup.cs ConfigureService ของคุณ:
    services.AddGrpc();
    services.AddGrpcHttpApi(); 
person Jesus Santander    schedule 02.11.2020