在调用扩展方法注册基于 HTTP.SYS 的服务器时,我们可以使用提供的委托来设置相关的配置选项。该属性返回注册的监听地址前缀,但最终这是否直接注册到服务器上的监听地址取决于ure特性的属性,与此一致。
public class HttpSysOptions { public UrlPrefixCollection UrlPrefixes { get; } public RequestQueueMode RequestQueueMode { get; set; } public string? RequestQueueName { get; set; } public long RequestQueueLimit { get; set; } public AuthenticationManager Authentication { get; } public ClientCertificateMethod ClientCertificateMethod { get; set; } public long? MaxConnections { get; set; } public long? MaxRequestBodySize { get; set; } public int MaxAccepts { get; set; } public Http503VerbosityLevel Http503Verbosity { get; set; } public TimeoutManager Timeouts { get; } public bool AllowSynchronousIO { get; set; } public bool EnableResponseCaching { get; set; } public bool ThrowWriteExceptions { get; set; } public bool UnsafePreferInlineScheduling { get; set; } public bool UseLatin1RequestHeaders { get; set; } }
HTTP.SYS 使用请求队列来存储挂起的请求,我们可以使用该属性来决定是创建一个新的队列还是使用一个现有的队列。属性类型是以下枚举。枚举项代表创建一个新队列,代表使用该属性命名的现有对象。如果队列不存在,则会抛出异常。提供一种折衷方案,如果给定名称不存在,则创建一个具有给定名称的新队列。该属性默认值为Null(代表匿名队列),该属性表示队列的容量,默认值为1000。主机携带的很多配置选项只会应用于新创建的请求队列。
public enum RequestQueueMode { Create, Attach, CreateOrAttach }
的属性返回一个 r 对象,我们用它来完成认证的设置。我们可以使用属性设置身份验证方案,默认为无。如果不允许匿名访问,则可以将该属性设置为 False。如果 ion 属性返回 True(默认值),则经过身份验证的用户将自动分配给上下文的 User 属性。yName 属性用于为身份验证方案提供显示名称。
public sealed class AuthenticationManager { public AuthenticationSchemes Schemes { get; set; } public bool AllowAnonymous {get; set; } public bool AutomaticAuthentication { get; set; } public string? AuthenticationDisplayName { get; set; } } [Flags] public enum AuthenticationSchemes { None = 0x0, Digest = 0x1, Negotiate = 0x2, Ntlm = 0x4, Basic = 0x8, Anonymous = 0x8000, IntegratedWindowsAuthentication = 0x6 }
HTTPS 站点可能需要证书来对其进行身份验证。hod 属性用于设置请求客户端证书的方式。此属性返回以下 hod 枚举。在 .NET 5 之前,用于提取客户端证书的方法是在已建立的 SSL/TLS 连接上再次发起一轮“协商握手”,对应枚举项。由于一些性能和死锁问题,在.NET 5之后这个方法已经默认禁用。目前的默认方法是在创建SSL/TLS连接的初始阶段提取证书。该方法对应枚举项。,这也是 hod 属性的默认值。
public enum ClientCertificateMethod { NoCertificate, AllowCertificate, AllowRenegotation }
和 属性分别表示请求正文内容的最大连接数和最大字节数。如果它们设置为 Null,则意味着忽略相应的限制。这两个属性的默认值分别为 Null 和 30,000,000。该属性表示接受的最大并发请求数,默认值为当前处理器数的5倍。如果并发请求数超过当前限制设置,则拒绝后续请求,服务器直接回复状态码为503的响应。如果该属性的值为Basic(默认值),则当前TCP 连接将被重置。Full 和 会影响响应的状态描述。前者返回详细,后者使用标准“”。
public enum Http503VerbosityLevel { Basic, Limited, Full }
返回如下对象的属性,我们用它来完成各种超时设置,包括请求体内容的到达时间()、读取请求体内容的时间()、请求入队的时间()、连接空闲时间()和解析请求头时间(),这些超时默认为两分钟。d 属性表示响应数据的最小发送速率,默认为每秒 150 字节。
public sealed class TimeoutManager { public TimeSpan EntityBody { get; set; } public TimeSpan DrainEntityBody { get; set; } public TimeSpan RequestQueue { get; set; } public TimeSpan IdleConnection { get; set; } public TimeSpan HeaderWait { get; set; } public long MinSendBytesPerSecond { get; set; } }
还定义了一系列其他属性。该属性(默认为False)表示是否运行同步IO来完成对请求和响应体内容的读写。g 属性(默认为 True)表示允许响应缓存。属性(默认为 False)指示是否因断开连接而无法写入响应正文内容而需要抛出异常。如果设置为True(默认为False),则表示后续的应用程序代码将直接在读请求的IO线程中执行,否则我们编写的应用程序代码将被分发到线程池中进行处理。这样可以通过避免线程切换来减少单个请求的处理时间,但是会对整体吞吐量产生负面影响。
暂无评论内容