Alojamiento de una instancia de API web de .NET Core 2 en Raspberry Pi 3

 C Programming >> Programación C >  >> Tags >> API
Alojamiento de una instancia de API web de .NET Core 2 en Raspberry Pi 3

Últimamente he pasado mucho tiempo trabajando para mejorar las experiencias de los desarrolladores al escribir código multiplataforma para Raspberry Pi 3 usando .NET Core 2.

En una publicación anterior, escribí sobre la creación de una aplicación de consola .NET Core 2 simple para Pi:puede ver el código en GitHub aquí, o si solo desea instalar la plantilla, simplemente instale el paquete Nuget ejecutando el código a continuación desde una línea de comando:

dotnet new -i RaspberryPiTemplate::*

Y para crear un nuevo proyecto de consola con esta plantilla, ejecute el código desde una línea de comando:

dotnet new coreiot -n MyProject

¿Qué tal si creamos un proyecto WebAPI para una Raspberry Pi 3?

Primero, asegúrese de tener .NET Core 2. Noté que el estado ha cambiado de Beta a Vista previa recientemente, y puede descargar un instalador desde aquí.

La manera fácil:use las plantillas precocinadas de Nuget

Si solo desea instalar una plantilla de Nuget, ejecute el siguiente código en una línea de comando;

dotnet new -i RaspberryPi.WebApi::*

Una vez que haya instalado esta plantilla, puede buscar el lugar donde desea que se cree su proyecto y ejecutar el siguiente comando (obviamente si no desea llamar a su proyecto "Mi proyecto", elija un nombre diferente).

dotnet new piwebapi -n MyProject

Esto creará un proyecto .NET Core 2 WebAPI llamado "MyProject", que se puede implementar en una Raspberry Pi con Windows 10 o Ubuntu. Hay un montón de secuencias de comandos de implementación de PowerShell en la raíz, y puede leer un poco más sobre ellas aquí.

Si desea ver un proyecto de muestra creado a partir de esta plantilla, he creado uno de muestra en GitHub aquí.

Si está implementando en Windows 10 IoT Core, recuerde abrir un puerto en el firewall para permitir las conexiones:mi plantilla de muestra usa el puerto 5000 y se puede abrir con el siguiente código si accede a su Pi.

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

O inténtelo de la manera difícil: cocine su propio proyecto

Una vez que haya instalado .NET Core 2, abra una línea de comando donde desee que viva su proyecto y ejecute la línea de código a continuación (nuevamente, obviamente, si no desea llamar a su proyecto "MyProject", elija una línea diferente nombre).

dotnet new webpi -n MyProject

Cuando se crea el proyecto, abra la carpeta raíz (que se llamará MyProject) y edite el archivo MyProject.csproj. Busque el nodo ProjectGroup que debería verse como el siguiente código:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

Y agregue dos notas adicionales:RuntimeFrameworkVersion y RuntimeIdentifiers:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeFrameworkVersion>2.0.0-preview1-002028-00</RuntimeFrameworkVersion>
    <RuntimeIdentifiers>win8-arm;ubuntu.14.04-arm;ubuntu.16.04-arm</RuntimeIdentifiers>
  </PropertyGroup>

Ahora mire el archivo Program.cs del proyecto y agregue la línea de código:

.UseUrls("http://*:5000")

al método principal, como se muestra a continuación:

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseUrls("http://*:5000")
            .ConfigureAppConfiguration((context, configBuilder) => {
                configBuilder
                    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
            })
            .ConfigureLogging(loggerFactory => loggerFactory
                .AddConsole()
                .AddDebug())
            .UseStartup<Startup>()
            .Build();
 
        host.Run();
    }
}

Construir e implementar en una Raspberry Pi 3

Primero, crea este proyecto de la forma habitual:busca el directorio en el que creaste tu proyecto y ejecuta:

dotnet restore .

dotnet build .

A continuación, publique la aplicación:el objetivo depende de si desea ejecutar una Raspberry Pi con Windows 10 o Ubuntu 16.04.

Orientación de publicación Ubuntu 16.04:

dotnet publish . -r ubuntu.16.04-arm

Publicación dirigida a Windows 10:

dotnet publish . -r win8-arm
A continuación, debemos implementar estos binarios:

Implementar en Ubuntu 16.04

Para implementar Ubuntu 16.04 desde una máquina con Windows, necesitamos algunas cosas:
  • Instalar PuTTY (que también instala herramientas llamadas pscp y plink , que necesitamos). Agregue el directorio de instalación de PuTTY a la ruta de su máquina de Windows.
  • El ID de usuario que usó para iniciar sesión en su Pi; el mío es ubuntu .
  • Cree un directorio en su Raspberry Pi para implementar el código WebAPI; lo he creado llamado "PiWebApi", que se encuentra en "/home/ubuntu/PiWebApi “.
  • La dirección IP de su Raspberry Pi. Asegúrese de que su Raspberry Pi haya iniciado sesión y esté conectada a su red local. La dirección IP de mi Ubuntu Pi es 192.168.1.110

Ahora ejecute el siguiente comando para copiar los binarios desde su máquina de desarrollo de Windows a la Raspberry Pi 3 remota.

pscp.exe -r .\bin\Debug\netcoreapp2.0\ubuntu.16.04-arm\publish\* ubuntu@$192.168.1.110:/home/ubuntu/PiWebApi

Luego ejecute el siguiente comando desde su máquina de desarrollo para hacer que el binario sea ejecutable en Raspberry Pi.

plink.exe -v -ssh [email protected] chmod u+x,o+x /home/ubuntu/PiWebApi/MyProject
Abra una conexión ssh usando PuTTY a su Pi 3 y ejecute el comando:
./home/ubuntu/PiWebApi/MyProject
La consola mostrará el siguiente texto cuando se inicie el servidor web:
Hosting environment: Production
Content root path: /home/ubuntu/PiWebApi
Now listening on: http://[::]:8000
Application started. Press Ctrl+C to shut down.
Y ahora puede navegar a la siguiente dirección para ver el servidor Raspberry Pi que devuelve valores de la solicitud HTTP GET:http://192.168.1.110:5000/api/values

Implementar en Windows 10 IoT Core

Para implementar en una Raspberry Pi con Windows 10, necesitamos:
  • Cree un directorio en su Raspberry Pi para implementar el código WebAPI a:lo he creado llamado "PiWebApi", que se encuentra en "C$/PiWebApi “.
  • Obtenga la dirección IP de su Raspberry Pi; asegúrese de haber iniciado sesión en su Raspberry Pi y conectado a su red local; la dirección IP de mi Windows 10 Pi es 192.168.1.125

Desde un símbolo del sistema abierto en la raíz de su proyecto WebAPI, ejecute el siguiente código para copiar los archivos binarios de su máquina de desarrollo a su Pi:

xcopy.exe /y ".\bin\Debug\netcoreapp2.0\win8-arm\publish" "\\192.168.1.125\C$\PiWebApi"
Ahora abra una conexión ssh a su Raspberry Pi. Uso PowerShell para hacer esto a través del "Panel de Windows IoT" (como se muestra en la imagen a continuación):Desde esta conexión ssh, ahora necesita abrir el puerto 5000 en el firewall de Raspbery Pi 3:
netsh advfirewall firewall add rule name="ASPNet Core 2 Server Port" dir=in action=allow protocol=TCP localport=5000
Vaya a la carpeta de implementación en su Raspberry Pi (en este caso, C:\PiWebApi) y ejecute el siguiente comando:
./MyProject.exe
De nuevo, el siguiente texto se escribe en la consola cuando se inicia el servidor web:
Hosting environment: Production
Content root path: C:\PiWebApi
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.

Y nuevamente, puede navegar a la dirección a continuación para ver el servidor Raspberry Pi que devuelve valores de la solicitud HTTP GET:

http://192.168.1.125:5000/api/valores