この投稿により、WebApi が STA モードで実行できなくなります。しかし、この投稿も2歳です。
MessageHandlers
私は新しい WebApi2 を掘り下げてきましたが、STA モードで実行する方法が見つからないようです。
WebApi または WebApi2 を STA モードで実行する方法を見つけた人はいますか?
この投稿により、WebApi が STA モードで実行できなくなります。しかし、この投稿も2歳です。
MessageHandlers
私は新しい WebApi2 を掘り下げてきましたが、STA モードで実行する方法が見つからないようです。
WebApi または WebApi2 を STA モードで実行する方法を見つけた人はいますか?
したがって、リクエスト処理スレッド全体を STA モードに切り替えたい場合は、MVCを使用したほうがよいようです。ただし、スレッド全体を STA モードに切り替える必要のない 1 回限りのタスクをハンドラーが実行する場合は、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 中に 1 回だけ初期化されるようにします。