2013-07-09 5 views
4

У меня есть консольное приложение, которое является самообслуживанием ASP.Net WebAPI. Я хотел бы, чтобы консольное приложение само закрылось на основе определенного вызова WebAPI.Self завершающий Self-hosting WebAPI

приложение консоли в значительной степени основана на примере находится здесь ->http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api

Чтобы обеспечить некоторый контекст;

Консольное приложение будет использоваться совместно с Jenkins CI для автоматизации тестирования BDD приложения для Android. Дженкинс будет отвечать за создание, установку и запуск приложения для Android - он будет вызывать это консольное приложение. Приложение Android будет проходить через ряд тестов Jasmine BDD, автоматически возвращающих обновления Jenkins через консольное приложение/WebAPI. По завершении тестов приложение Android вызовет определенное действие WebAPI - на этом этапе я хочу, чтобы он завершил консольное приложение, чтобы Дженкинс переместился на следующий шаг сборки.

Заранее спасибо.

ответ

7

Просто используйте ManualResetEvent. В своем классе по программе, добавить статическую открытое поле:

public static System.Threading.ManualResetEvent shutDown = 
     new ManualResetEvent(false); 

, а затем в основной метод:

config.Routes.MapHttpRoute(
    "API Default", "api/{controller}/{id}", 
    new { id = RouteParameter.Optional }); 

using (HttpSelfHostServer server = new HttpSelfHostServer(config)) 
{ 
    server.OpenAsync().Wait(); 
    //Console.WriteLine("Press Enter to quit."); 
    //Console.ReadLine(); 
    shutDown.WaitOne(); 
} 

, а затем в соответствующем методе API:

Program.shutDown.Set(); 

Когда ваш главный выход метода, программа остановится.

+0

Ницца и элегантный, +1 –

+0

работает как шарм, спасибо. –

+0

Если этот переключатель выключения будет установлен в методе API, будет ли он отправлять правильный ответ? Похоже, что программа немедленно остановится, но что произойдет со всеми запросами, которые в настоящее время обрабатываются? –

0

Для выключения нормальной .Net приложение, которое вы можете использовать:

System.Environment.Exit(0) 

Смотреть MSDN

+0

Это, на мой взгляд, последнее решение. Метод Damien позволит правильно очистить перед выходом (например, закрытие других потоков), в то время как это решение является скорее Wail и Bail. –