Преобразование веб-API для использования собственного хостинга

22

Я пытаюсь преобразовать существующий проект ASP.NET Web API (в настоящее время размещен в IIS) в тот, который может использовать структуру SelfHost. Я немного неясен в реальных деталях, но понимаю, что я могу запустить сервер с собственными хостами в окне консоли, а затем запустить службу поверх нее. Проблема, с которой я сталкиваюсь, заключается в том, что мой проект - это проект MVC, а не консольный. Мое знакомство с консольными/Windows-приложениями несколько ограничено, поскольку я обычно работаю с проектами, которые будут размещены в IIS.

Я немного запутался в том, нужно ли мне преобразовать существующий проект веб-API в Visual Studio в новое консольное приложение или если есть способ создать другое консольное приложение Project в решении, которое может действовать как веб-сервер для служб веб-API, или, вернее, если есть способ добавить элемент консоли с точкой входа Main() в существующий проект MVC (переопределение точки входа Global.asax.)

Поиск не дал много информации, которая помогает мне заполнить этот пробел в знаниях. Надеясь, кто-то может указать мне в правильном направлении. Даже на высоком уровне.

  • 0
    Вот несколько примеров stackoverflow.com/questions/12899360/… , stackoverflow.com/questions/13165533/… из моих предыдущих ответов.
  • 0
    @L.Bспасибо за ваш комментарий, но если я что-то упустил, я не могу понять, как это отвечает на вопрос.
Показать ещё 1 комментарий
Теги:
iis
asp.net-web-api
owin

1 ответ

37

Недавно мне пришлось преобразовать проект 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); 
  • 0
    Program.cs не отображается в «Объекте запуска». Есть идеи?
  • 0
    Derp. Не берите в голову. Забыл сделать главное статичным :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню