วิธีการใช้งานเว็บเซิร์ฟเวอร์ HTTP.sys ใน ASP.Net Core

ASP.Net Core เป็นเฟรมเวิร์กแบบโอเพ่นซอร์สข้ามแพลตฟอร์มแบบลีนและโมดูลาร์สำหรับการสร้างเว็บแอปพลิเคชันประสิทธิภาพสูง Kestrel เป็นเว็บเซิร์ฟเวอร์ข้ามแพลตฟอร์มสำหรับ ASP.Net Core ที่รวมไว้โดยค่าเริ่มต้น อย่างไรก็ตามมันมีข้อ จำกัด

เพื่อหลีกเลี่ยงข้อ จำกัด เหล่านั้นฉันขอแนะนำให้คุณใช้ HTTP.sys ซึ่งเป็นเซิร์ฟเวอร์ HTTP สำหรับ Windows เท่านั้นที่ใช้ไดรเวอร์เคอร์เนล HTTP.sys ซึ่งเป็นผู้ใหญ่ปลอดภัยและปรับขนาดได้

ทำไมคุณควรใช้ HTTP.sys

โดยทั่วไปคุณต้องใช้ HTTP.sys เมื่อคุณต้องเปิดเผยเซิร์ฟเวอร์ของคุณสู่โลกภายนอกโดยใช้ IIS (Microsoft Internet Information Services) คำขอแรกมาที่ HTTP.sys ซึ่งสร้างขึ้นจากโปรแกรมควบคุมโหมดเคอร์เนล HTTP.sys HTTP.sys จะสร้างคิวรวมทั้งพูลแอ็พพลิเคชันแต่ละรายการสำหรับแต่ละคำขอตามคำขอ

คุณยังสามารถใช้ HTTP.sys เมื่อคุณต้องการคุณสมบัติที่ Kestrel ไม่รองรับ คุณสมบัติที่ HTTP.sys รองรับ ได้แก่ :

  1. การรับรองความถูกต้องของ Windows
  2. เว็บซ็อกเก็ต
  3. การแบ่งปันโพสต์
  4. HTTPS
  5. การแคชการตอบกลับ
  6. การส่งไฟล์โดยตรง

เริ่มต้นโครงการใน HTTP.sys

หากคุณใช้ Visual Studio 2017 ให้ทำตามขั้นตอนเหล่านี้เพื่อสร้างโครงการ ASP.Net Core Web API:

  1. ใน Visual Studio IDE ให้เลือกไฟล์> ใหม่> โครงการ
  2. เลือก ASP.Net Core Web Application (.Net Core) จากรายการเทมเพลตที่แสดง
  3. ระบุ UsingHTTPSysInCode เป็นชื่อสำหรับโปรเจ็กต์
  4. คลิกตกลงเพื่อบันทึกโครงการ
  5. เลือก API ในหน้าต่าง New .Net Core Web Application
  6. เลือกเวอร์ชันของ ASP.Net Core ที่คุณต้องการใช้จากเมนูแบบเลื่อนลงที่ด้านบน
  7. ยกเลิกการเลือก Enable Docker Support แล้วเลือก No Authentication เพราะคุณจะไม่ใช้สิ่งเหล่านี้ที่นี่
  8. คลิกตกลง

ขั้นตอนเหล่านี้สร้างโครงการ ASP.Net Core ใหม่ชื่อ UsingHTTPSysInCode ใน Visual Studio 2017

กำหนดค่าแอปพลิเคชัน ASP.net Core สำหรับ HTTP.sys

ถัดไปคุณควรติดตั้งแพ็คเกจที่คุณต้องการ วิธีที่ดีที่สุดคือการติดตั้งแพคเกจเมตา Microsoft.AspNetCore ทั้งหมดผ่านตัวจัดการแพ็คเกจ NuGet เพื่อให้แน่ใจว่าแพ็คเกจที่จำเป็นทั้งหมดได้รับการติดตั้งในครั้งเดียว

จากนั้นเปิดไฟล์ Program.cs ในโครงการของคุณ ควรมีลักษณะดังนี้:

โปรแกรมคลาสสาธารณะ {public static void Main (string [] args) {CreateWebHostBuilder (args) .Build (). run (); } สาธารณะคงที่ IWebHostBuilder CreateWebHostBuilder (สตริง [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup (); }

เมื่อติดตั้งแพ็คเกจแล้วให้กำหนดค่าเซิร์ฟเวอร์ HTTP.sys ผ่านวิธีการใช้ส่วนขยาย UseHttpSys ของ WebHostBuilder ในเมธอดหลักสำหรับคลาส Program ในไฟล์ Program.cs วิธีการมีดังนี้

โมฆะคงที่สาธารณะ Main (สตริง [] args) {CreateWebHostBuilder (args) .Run (); } IWebHost แบบคงที่สาธารณะ CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup () .UseHttpSys (options => {options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.A allowAnonymous = true; options. MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add ("// localhost: 5000");}) .Build ();

นี่คือซอร์สโค้ดที่สมบูรณ์ของคลาส Program:

ใช้ Microsoft.AspNetCore; ใช้ Microsoft.AspNetCore.Hosting; ใช้ Microsoft.AspNetCore.Server.HttpSys; namespace UsingHTTPSysInCode {public class Program {public static void Main (string [] args) {CreateWebHostBuilder (args) .Run (); } IWebHost แบบคงที่สาธารณะ CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup () .UseHttpSys (options => {options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.A allowAnonymous = true; options. MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add ("// localhost: 5000");}) .Build ();}}

สุดท้ายเมื่อคุณเรียกใช้แอปพลิเคชันตรวจสอบให้แน่ใจว่าคุณเลือกโปรไฟล์การเปิดใช้งานอย่างเหมาะสม โปรไฟล์การเปิดตัวเริ่มต้นคือ IIS ใน Visual Studio เลือก UsingHTTPSysInCode สำหรับตัวอย่างนี้ มันเหมือนกับชื่อของโปรเจ็กต์และเนมสเปซ

เมื่อคุณเรียกใช้แอปพลิเคชันโดยใช้โปรไฟล์การเรียกใช้เป็น UsingHTTPSysInCode หน้าต่างคอนโซลจะเปิดขึ้นเพื่อแสดงชุดขั้นตอนที่กำลังดำเนินการก่อนที่คุณจะเห็นผลลัพธ์ของเมธอด Get ของ ValuesController (สมมติว่าเป็นตัวควบคุมเริ่มต้นของคุณ) ในเว็บเบราว์เซอร์ของคุณ