ASP.NET Core MVC в Windows IoT (Raspbian Pi)

Я новичок в Windows IoT и пытаюсь запустить свое первое приложение dot net core на Raspberry Pi. Это не потому, что я считаю Raspbian Pi идеальным местом для размещения веб-сайтов, а моя цель - реализовать систему измерения и управления на Pi и сделать все это доступным через REST API. Перво-наперво, я хотел создать стандартное приложение dot net core из шаблона VS2017 и запустить его на Pi.

В шаблоне было создано приложение, которое было доступно на http://localhost:62100.

Как я знал из предыдущих экспериментов, приложение прослушивало только localhost, поэтому я изменил класс Program следующим образом:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
        var hostUrl = configuration["hosturl"];
        if (string.IsNullOrEmpty(hostUrl))
            hostUrl = "http://0.0.0.0:62100";

        return new WebHostBuilder()
            .UseKestrel()
            .UseUrls(hostUrl)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseConfiguration(configuration)
            .Build();
    }
}

И теперь сервером можно было пользоваться с моего телефона, используя IP-адрес ПК.

Чтобы подготовить проект для Pi, я открыл PowerShell в папке, где находится файл проекта (в моем случае C: \ Users \\ Documents \ Visual Studio 2017 \ Projects \ AspNetCore \ AspNetCore) и выполнил команду:

dotnet publish -r win10arm

Затем я скопировал все файлы, размещенные в bin \ Debug \ netcoreapp2.0 \ win10-arm \ publish, на Pi и запустил приложение из PowerShell, подключенного к Pi:

  .\AspNetCore.exe

Pi (после некоторых глубоких размышлений) отвечает, как при запуске на ПК:

  [192.168.200.106]: PS C:\CoreApplications\AspNetCore> .\AspNetCore.exe
  Hosting environment: Production
  Content root path: C:\CoreApplications\AspNetCore
  Now listening on: http://0.0.0.0:62100
  Application started. Press Ctrl+C to shut down.

Но попытка доступа к серверу из моего браузера (http://192.168.200.106:62100) завершается с ошибкой ERR_CONNECTION_TIMED_OUT .

Что мне не хватает?


person TheRoadrunner    schedule 09.12.2017    source источник
comment
Какая у вас версия ядра Windows iot? А какую версию DotNetCore вы использовали?   -  person Michael Xu - MSFT    schedule 11.12.2017
comment
AspNetCore - 2.0.3, не уверен насчет версии IoT (проверю, когда вернусь к ней), но это новая загрузка с прошлой недели.   -  person TheRoadrunner    schedule 11.12.2017


Ответы (1)


Вам необходимо добавить порт в брандмауэр с помощью следующего командлета в PowerShell, по умолчанию ASP.Net Core привязывается к http://localhost:5000.

netsh advfirewall firewall add rule name = "ASPNet Core 2 Server Port" dir = in action = allow protocol = TCP localport = 62100

person Michael Xu - MSFT    schedule 11.12.2017
comment
Думаю, вы предлагаете рекламировать это правило на Raspberry? Разве это не было бы «активно отклонено» вместо истечения тайм-аута, если бы это была проблема брандмауэра? - person TheRoadrunner; 11.12.2017
comment
Да, причина в том, что брандмауэр отклоняет веб-запрос. Поэтому вам необходимо добавить правило для Raspberry. Информация Time Out указывает, что клиент не может получить ответ, но в клиенте он не знает, отклонил ли сервер запрос или он был отключен. - person Michael Xu - MSFT; 11.12.2017
comment
Потрясающе - это действительно был брандмауэр. - person TheRoadrunner; 11.12.2017