Я пытаюсь преобразовать существующий проект ASP.NET Web API (в настоящее время размещен в IIS) в тот, который может использовать структуру SelfHost. Я немного неясен в реальных деталях, но понимаю, что я могу запустить сервер с собственными хостами в окне консоли, а затем запустить службу поверх нее. Проблема, с которой я сталкиваюсь, заключается в том, что мой проект - это проект MVC, а не консольный. Мое знакомство с консольными/Windows-приложениями несколько ограничено, поскольку я обычно работаю с проектами, которые будут размещены в IIS.
Я немного запутался в том, нужно ли мне преобразовать существующий проект веб-API в Visual Studio в новое консольное приложение или если есть способ создать другое консольное приложение Project в решении, которое может действовать как веб-сервер для служб веб-API, или, вернее, если есть способ добавить элемент консоли с точкой входа Main() в существующий проект MVC (переопределение точки входа Global.asax.)
Поиск не дал много информации, которая помогает мне заполнить этот пробел в знаниях. Надеясь, кто-то может указать мне в правильном направлении. Даже на высоком уровне.
Недавно мне пришлось преобразовать проект Web API в самообслуживаемую службу, используя OWIN (на Visual Studio 2013). Я сделал это следующим образом:
(1) Вручную добавлены файлы Program.cs и Startup.cs в корневой каталог проекта. Оба файла содержат код, как описано здесь: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api.
(2) Перешел к свойствам проекта Web API. В разделе "Приложения" я сказал "Тип вывода" как "Консольное приложение" и задал класс "Программа" как "Объект запуска".
Хотя это и не требуется, я слегка изменил блок "using" в Program.Main(), чтобы выглядеть следующим образом:
// Start OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
{
// Create HttpCient and make a request to api/values
HttpClient client = new HttpClient();
var response = client.GetAsync(baseAddress + "api/values").Result;
if (response != null)
{
Console.WriteLine("Information from service: {0}", response.Content.ReadAsStringAsync().Result);
}
else
{
Console.WriteLine("ERROR: Impossible to connect to service");
}
Console.WriteLine();
Console.WriteLine("Press ENTER to stop the server and close app...");
Console.ReadLine();
}
Наконец, вместо вызова config.Routes.MapHttpRoute() несколько раз в Startup.Configuration() вы можете ссылаться на маршруты, которые вы уже писали для веб-API:
// Configure Web API for self-host.
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);