콘솔 앱의 일부로 OWIN 서버가 있습니다. 현재 주요 방법을 볼 수자체 호스트 오 틴 서버를 중지 할 때 현재 요청을 완료하십시오.
class Program
{
public static ManualResetEventSlim StopSwitch = new ManualResetEventSlim();
static void Main(string[] args)
{
Console.CancelKeyPress += (s, a) =>
{
a.Cancel = true;
StopSwitch.Set();
};
using (WebApp.Start<Startup>("http://+:8080/"))
{
Console.WriteLine("Server is running...");
Console.WriteLine("Press CTRL+C to stop it.");
StopSwitch.Wait();
Console.WriteLine("Server is stopping...");
}
Console.ReadKey();
Console.WriteLine("Server stopped. Press any key to close app...");
}
}
요청의 처리가 조금 이상 함과 동시에 사용자의 요청 처리 즉시 중지되고 응답이 전송되지 않습니다 응용 프로그램을 중지하려면 Ctrl + C를 누르면. 이 행동을 바꿀 수 있습니까? 나는 모든 새로운 요청을 거절하고 싶지만 현재 처리중인 요청이 완료 될 때까지 기다렸다가 그 후에 서버를 중지 할 때까지 기다린다.
나의 초기 아이디어는 현재 처리중인 요청을 추적하고 모든 것이 완료 될 때까지 작업을 연기 할 OWIN 미들웨어를 만드는 것입니다. 미들웨어는 또한 중지 단계에서 모든 요청을 단락시킵니다. 하지만이 솔루션은 나에게 좋지 않은 소리입니다.
나에게 아주 좋은 생각이 들립니다. 난 당신이 새로운 요청을 단락시키기 위해 _ 무언가를 필요로한다고 생각합니다. 그리고 파이프 라인에 무언가를 넣는 것은 그것을 할 수있는 적당한 장소처럼 보입니다. 추적 요청의 경우 기본적인 ['Interlocked.Increment'] (http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment (v = vs.110) .aspx) /'Decrement' 카운터는 요청이 시작되고 끝날 때 마지막 요청이 언제 끝났는 지 안다. – Rhumborl