#if NETCORE using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.HttpSys; namespace Apewer.Web { /// HTTP.sys 服务器。 /// /// HTTP.sys 是仅在 Windows 上运行的适用于 ASP.NET Core 的 Web 服务器,提供了一些 Kestrel 不提供的功能。 /// HTTP.sys 支持以下功能:
Windows 身份验证;
端口共享;
具有 SNI 的 HTTPS;
基于 TLS 的 HTTP/2(Windows 10 或更高版本);
直接文件传输;
响应缓存;
WebSocket(Windows 8 或更高版本)。
///
public class HttpSysServer : HttpSysServer where TStartup : AspNetCoreStartup { /// 启动。 public virtual void Run() => Run(false); } /// HTTP.sys 服务器。 /// /// HTTP.sys 是仅在 Windows 上运行的适用于 ASP.NET Core 的 Web 服务器,提供了一些 Kestrel 不提供的功能。 /// HTTP.sys 支持以下功能:
Windows 身份验证;
端口共享;
具有 SNI 的 HTTPS;
基于 TLS 的 HTTP/2(Windows 10 或更高版本);
直接文件传输;
响应缓存;
WebSocket(Windows 8 或更高版本)。
///
public class HttpSysServer : AspNetCoreServer { /// 配置 WebHost 构建程序。 protected override void Configure(IWebHostBuilder builder) => builder.UseHttpSys(Configure); /// 配置 HTTP.sys 服务器。 protected virtual void Configure(HttpSysOptions options) { // 同步 IO。 options.AllowSynchronousIO = true; // 限制请求大小。 options.MaxRequestBodySize = MaxBody; // 禁用内核缓存。 options.EnableResponseCaching = false; // 认证。 options.Authentication.Schemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; // 配置端口和证书。 var ip = "0.0.0.0"; var port = Port; var certificate = Certificate; var protocol = certificate == null ? "http" : "https"; var prefix = $"{protocol}://{ip}:{port}"; options.UrlPrefixes.Add(prefix); } /// 启动。 public override void Run() => Run(false); } } #endif