ASP.Net WebApi STA Mode

本文关键字:Mode STA WebApi Net ASP | 更新日期: 2023-09-27 17:58:42

这篇文章使WebApi无法在STA模式下运行。但这篇帖子也是2年前的事了。

我一直在研究更新的WebApi2,但似乎找不到让MessageHandlers在STA模式下运行的方法。

那么,有人找到了在STA模式下运行WebApi或WebApi2的方法吗?

ASP.Net WebApi STA Mode

因此,如果您想将整个请求处理线程切换到STA模式,那么最好使用MVC。然而,如果您的处理程序执行一次性任务,而不涉及将整个线程切换到STA模式,那么Web API会使其非常容易。我是这样做的:

public class StaHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // consider moving it to singleton instance to improve performance
        var staTaskScheduler = new StaTaskScheduler(100);
        return Task.Factory.StartNew<HttpResponseMessage>(() =>
        {
            //somethign that does its magic and returns a HttpResponseMessag
            return new HttpResponseMessage();
        }, cancellationToken,
            TaskCreationOptions.None,
            staTaskScheduler);
    }
}

需要考虑的事项:

  • 创建StaTaskScheduler非常繁重。考虑将其移动到单例,或确保在App_Start期间只初始化一次
  • 线程池大小(在我的示例中为100)也可以在这种扩展的程度上发挥作用。不幸的是,没有什么神奇的公式可以做到这一点。我创建了Web性能负载测试来找出服务器上的最佳点