В чем разница между IWebHost WebHostBuilder BuildWebHost - PullRequest
0 голосов
/ 29 августа 2018

Документация Microsoft абсолютно ужасна. Мне нужно развернуть веб-приложение .net core 2, которое я разработал, на сервере IIS, и я не могу получить прямой ответ ни на что. Это только начало моих вопросов.

В чем разница между IWebHost, WebHostBuilder и BuildWebHost?

Спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

Прежде всего, позвольте мне начать с того, что я очень не согласен с вашим утверждением: документация по ASP.NET Core на самом деле очень хорошая. Да, возможно, ему все еще не хватает некоторых деталей, и у него также есть некоторые проблемы, связанные с изменениями в релизах, но в целом контент действительно хорош, и команда, работающая над ним, действительно делает замечательную работу. Действительно сложно написать документацию для такой большой и быстро меняющейся среды, и объем информации, которую вы получаете через документацию, на самом деле очень хороший. Скорее всего, вы поймете, что как только вы преодолеете начальные проблемы, начав с новой платформы.

Но вернемся к вашему вопросу:

  • IWebHost: веб-хостинг - это главное, что размещает и запускает ваше веб-приложение. Он создается при запуске приложения, а затем создает все необходимые компоненты, такие как веб-сервер Kestrel, конвейер промежуточного программного обеспечения приложения и все остальные биты, и соединяет их, так что ваше приложение готово обслуживать ваши запросы. .

    Веб-хостинг - это в основном то, что составляет ваше веб-приложение.

  • IWebHostBuilder: Конструктор веб-хостов - это, по сути, фабрика для создания веб-хостинга. Это то, что создает веб-хост, но также настраивает все необходимые биты, необходимые веб-хосту для определения , как запустить веб-приложение.

    В ASP.NET Core 2 вы обычно создаете «компоновщик веб-хостов по умолчанию», который уже будет иметь много настроек по умолчанию. Например, веб-хост по умолчанию настроит веб-сервер Kestrel, включит и настроит ведение журнала и добавит поддержку конфигурации appsettings.json.

    Обычно ваши приложения всегда запускаются с такого веб-хоста по умолчанию, и вы просто используете конструктор веб-хостов для последующей настройки веб-хоста до его фактической сборки.

  • BuildWebHost является частью более старого соглашения до ASP.NET Core 2.1, где шаблон по умолчанию в Program.cs заключался в создании веб-хоста отдельным методом. В версии 2.1 это было изменено так, чтобы метод больше не собирал веб-хоста напрямую, а просто создавал компоновщик веб-хоста (следовательно, метод теперь называется CreateWebHostBuilder). Таким образом, вызов метода .Build() для веб-хостинга был реорганизован из метода. Это прекрасно видно в руководстве по миграции для 2.0 на 2.1 .

    Причина, по которой это было сделано, состоит в том, чтобы сделать CreateWebHostBuilder повторно используемым. Конфигурация компоновщика, которая происходит в этом методе, является в основном всем, что необходимо для настройки веб-хостинга. Таким образом, делая его многоразовым, не создавая реально созданный веб-хостинг, его можно использовать для других целей. В этом случае это было сделано для интеграционного тестирования с использованием TestHost. Тестовый хост в основном будет размещать веб-хост для ваших интеграционных тестов, и он будет делать это путем поиска метода CreateWebHostBuilder.

В настоящее время шаблон по умолчанию, который вы видите в Program.cs, начиная с ASP.NET Core 2.1, выглядит следующим образом (комментарии, добавленные мной для дальнейших пояснений):

public class Program
{
    // main entry point for your application
    public static void Main(string[] args)
    {
        // create the web host builder
        CreateWebHostBuilder(args)
            // build the web host
            .Build()
            // and run the web host, i.e. your web application
            .Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        // create a default web host builder, with the default settings and configuration
        WebHost.CreateDefaultBuilder(args)
            // configure it to use your `Startup` class
            .UseStartup<Startup>();
}

Btw. эта тема обычно рассматривается в разделах запуска приложений и хостинга официальной документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...