Создание консольного приложения .NET Core со встроенным веб-сервером ASP.NET Core? - PullRequest
0 голосов
/ 17 ноября 2018

Я вижу в Интернете различные учебные пособия о создании консольного приложения .NET Core и создании приложения ASP.NET Core, но чего я не нахожу, так это о создании консольного приложения .NET Core, которое начинается с вывода на консоль, но также содержит веб-приложение ASP.NET. В этом случае я пишу приложение, которое работает как служба Windows или Linux. Он работает как демон. Поэтому теперь я хочу добавить веб-интерфейс ASP.NET Core для вывода информации о состоянии.

Есть ли рекомендуемый способ сделать это? Я предполагаю, что мне нужно создать WebHostBuilder и создать свой новый WebHost с .Build(), но должен ли я создать новый проект для этого и ссылаться на него из своего проекта консольного приложения? Если да, какой SDK он должен использовать для проекта? Я не могу использовать Microsoft.NET.Sdk.Web, потому что для этого требуется метод Main, который я явно не хочу иметь, если на него будут ссылаться из существующего приложения, имеющего собственный метод Main, но если я использую Microsoft.NET.Sdk.Razor, я, кажется, получаю кучу конфликтов версий и ошибок, таких как:

Обнаружен конфликт версий для Microsoft.Extensions.Configuration.Abstractions. Установите / обратитесь к Microsoft.Extensions.Configuration.Abstractions 2.1.1 непосредственно в проект MyProject для решения этой проблемы.

Так что я чувствую, что мне здесь не хватает чего-то фундаментального; Каков наилучший способ встраивания веб-приложения в консольное приложение в .NET Core?

1 Ответ

0 голосов
/ 17 ноября 2018

Вы можете определенно установить пакеты ASP.NET Core в свой проект .NET Core и создать WebHost, который будет использоваться в качестве компонента веб-сервера в вашем приложении, как вы сказали сами.Простой способ сделать это - установить метапакет Microsoft.AspNetCore.App , который будет включать все зависимости пакетов, обычно используемые для приложений ASP.NET Core.

Как ASP.NET Core.технологии выходят за рамки моего ответа, с этого момента я буду использовать краткие примеры.

После того, как вы установили метапакет Microsoft.AspNetCore.App в свой проект, вы можете приступить к созданию класса Startupинициализировать ваш сервер и разработать приложение с использованием технологий ASP.NET Core.Простой Startup класс, служащий примером:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        /* configure any services you need here */
    }

    public void Configure(IApplicationBuilder app)
    {
        // Output a "hello world" to the user who accesses the server
        app.Use(async (context, next) =>
        {
            await context.Response.WriteAsync("Hello, world!");
        });
    }
}

Затем вы можете приступить к созданию веб-хоста с чем-то вроде этого:

IWebHost myHost = WebHost.CreateDefaultBuilder()
    .UseStartup<Startup>()
    .Build();

Наконец, вы должны вызвать Run() метод для того, чтобы ваш веб-хост запустился и начал прослушивать соединения:

myHost.Run();

Запустите приложение, и сервер будет работать с некоторыми конфигурациями по умолчанию (вероятно, под http://localhost:5000/ адрес ... адрес сервера/ порт будет выводиться на вывод вашей консоли по умолчанию).Попробуйте получить доступ к серверу через браузер, и он должен напечатать вам «привет мир».

Метод Run() является методом блокировки.Поскольку у вас уже есть консольное приложение, которое вы хотите «расширить» с помощью веб-хоста, вам, вероятно, следует проверить метод Start () , который запускает веб-хост без блокировки вашего консольного приложения, и вы можетеиспользуйте это для того, чтобы все еще иметь возможность делать что-то, например, принимать пользовательский ввод.Вот небольшой пример того, как сделать это на этой странице документа .

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