Вы малину мыли ли? – Мыли, да не мылили. Запускаем ASP.NET 5 Web Application на Raspberry Pi с Windows IoT

AspNet RaspberryPi

Рассматриваемое в этой заметке решение работает с билдом aspnetvnext v1.0.0-rc2-16357 и приведенный ниже набор операций с большой вероятностью потеряет актуальность с выходом версии 1.0.0, или даже раньше. Кроме того, с каждой новой сборкой ASP.NET связаны breaking changes, так что многое из написанного ниже не применимо к более ранним версиям, в том числе и к RC1.

Итак, к делу. Нам понадобятся: Raspberry Pi 2B с картой памяти, компьютер с Windows 10 и Visual Studio 2015 Update 1, кардридер и Ethernet кабель. Для начала необходимо скачать утилиту Windows 10 IoT Core Dashboard – с помощью нее мы записываем на карточку Windows 10 и затем сможем увидеть информацию о подключенных устройствах. Затем вставляем в Raspberry Pi подготовленную карту памяти, соединяем его с помощью Ethernet кабеля с локальной сетью (либо напрямую с компьютером), и включаем.

Также на компьютер понадобится установить ASP.NET 5 RC. После этого открываем консоль и выполняем следующие команды для установки DNX версии 1.0.0-rc2.

dnvm upgrade
dnvm update-self
dnvm install 1.0.0-rc2 -r coreclr -arch x86 -u
dnvm install 1.0.0-rc2 -r coreclr -arch x64 -u
dnvm install 1.0.0-rc2 -r coreclr -arch ARM -u
dnvm install 1.0.0-rc2 -r clr -arch x86 -u
dnvm install 1.0.0-rc2 -r clr -arch x64 -u

Для просмотра уже установленных версий можно использовать команду dnvm list.

Также в Visual Studio добавим новый источник NuGet пакетов. Для этого заходим в Tools > Options > NuGet Package Manager > Package Sources и указываем фид https://www.myget.org/F/aspnetvnext/api/v3/index.json.

На этом подготовка заканчивается.

Создадим новый Solution в Visual Studio, выбрав Empty ASP.NET 5 Template. Сразу откроем свойства проекта и выберем Solution DNX SDK version: 1.0.0-rc2. Затем отредактируем project.json, обновив версии для version и dependencies, а также изменив стандартное значение Microsoft.AspNet.Server.Kestrel в commands.web на namespace, в котором находится проект – в моем случае это WebApplication1. Зачем менять значение commands.web можно узнать здесь. Пример нового файла приведен ниже.

{
  "version": "1.0.0-rc2",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc2-16069",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-16236"
  },

  "commands": {
    "web": "WebApplication1"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

Далее в корень проекта добавим файл hosting.json cо следующим содержимым.

{
  "webroot": "wwwroot",
  "server": "Microsoft.AspNet.Server.Kestrel",
  "server.urls": "http://*:5000",
  "app": "WebApplication1",
  "environment": "Development",
  "detailedErrors": true
}

Наконец, обновим код в Startup.cs. Заменим реализацию метода Main, подходившую к предыдущей версии, но не работающую с RC2, на новую.

public static void Main(string[] args)
{
    var config = WebApplicationConfiguration.GetDefault(args);

    var application = new WebApplicationBuilder()
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .Build();

    application.Run();
}

Итак, пришло время собрать наш Solution и запустить его. Надеюсь, у вас все работает, потому что у меня – да.

Теперь перейдем к последнему этапу – ведь мы же хотели запустить это не на своем компьютере, а на Raspberry Pi.

Открываем консоль из папки с проектом и выполняем следующую команду, не забыв заменить output-директорию, а также версию dnx на ту, которую вы установили.

dnu publish --out D:\publish\WebApplication1 --no-source --runtime dnx-coreclr-win-arm.1.0.0-rc2-16357

Теперь копируем только что созданную папку WebApplication1 на Raspberry Pi. Открываем Windows 10 IoT Core Dashboard и находим IP адрес нашего устройства. Можно использовать путь путь ftp://aaa.bbb.ccc.ddd/, или же \\aaa.bbb.ccc.ddd\c$, но во втором случае необходимо предварительно создать нового пользователя и добавить его в группу администраторов, команды есть здесь. Нашу папку кладем внутри директории PROGRAMS на устройстве.

Остается только запустить наше приложение. Для этого открываем PowerShell и подключаемся к Raspberry Pi.

net start WinRM
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
Enter-PSSession -ComputerName <machine-name or IP Address> -Credential <machine-name or IP Address or localhost>\Administrator

(стандартный пароль p@ssw0rd, его можно заменить с помощью команды net user Administrator [new password]).

Теперь откроем порт 5000, который мы указали в файле hosting.ini.

netsh advfirewall firewall add rule name="DNX Web Server port" dir=in action=allow protocol=TCP localport=5000

Переходим в нашу директорию.

Set-Location C:\PROGRAMS\WebApplication1\approot

И, наконец, запускаем сайт.

.\web.cmd

Теперь можете открыть в браузере адрес http://aaa.bbb.ccc.ddd:5000/ и насладиться прекрасным видом «Hello World!».

На этом все. А как настроить MVC в ASP.NET 5 Web Application можно прочитать в предыдущей статье.

Спасибо за внимание.