1

post은 WebApi를 STA 모드에서 실행할 수 없도록 긁습니다. 그러나이 지위는 또한 2 세입니다.ASP.Net WebApi STA 모드

저는 최신 WebApi2를 파고 들었지만 MessageHandlers을 STA 모드로 실행하는 방법을 찾을 수 없습니다.

그래서 STA 모드에서 WebApi 또는 WebApi2를 실행하는 방법을 찾은 사람이 있습니까?

답변

4

그래서 전체 요청 처리 스레드를 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 Performance Load Tests을 만들었습니다.