此post让WebApi无法在STA模式下运行。但是这篇文章也有2年了。
我一直在挖掘新的WebApi2,但似乎无法找到让MessageHandlers
在STA模式下运行的方法。
那么有没有人找到在STA模式下运行WebApi或WebApi2的方法?
答案 0 :(得分:5)
因此,如果您想将整个请求处理线程切换到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