Hosten einer .NET Core 2-Web-API-Instanz auf dem Raspberry Pi 3

 C Programming >> C-Programmierung >  >> Tags >> API
Hosten einer .NET Core 2-Web-API-Instanz auf dem Raspberry Pi 3

Ich habe in letzter Zeit viel Zeit damit verbracht, die Erfahrungen der Entwickler beim Schreiben von plattformübergreifendem Code für den Raspberry Pi 3 mit .NET Core 2 zu verbessern.

In einem früheren Beitrag habe ich über die Erstellung einer einfachen .NET Core 2-Konsolen-App für den Pi geschrieben – Sie können den Code hier auf GitHub sehen, oder wenn Sie nur die Vorlage installieren möchten, installieren Sie einfach das Nuget-Paket, indem Sie den folgenden Code ausführen von einer Befehlszeile:

dotnet new -i RaspberryPiTemplate::*

Und um ein neues Konsolenprojekt mit dieser Vorlage zu erstellen, führen Sie den Code von einer Befehlszeile aus:

dotnet new coreiot -n MyProject

Wie wäre es mit der Erstellung eines WebAPI-Projekts für einen Raspberry Pi 3?

Stellen Sie zunächst sicher, dass Sie über .NET Core 2 verfügen. Ich habe festgestellt, dass sich der Status kürzlich von Beta auf Vorschau geändert hat und Sie hier ein Installationsprogramm herunterladen können.

Der einfache Weg – verwenden Sie die vorgefertigten Vorlagen von Nuget

Wenn Sie nur eine Vorlage von Nuget installieren möchten, führen Sie den folgenden Code in einer Befehlszeile aus;

dotnet new -i RaspberryPi.WebApi::*

Sobald Sie diese Vorlage installiert haben, können Sie zu dem Ort navigieren, an dem Ihr Projekt erstellt werden soll, und den folgenden Befehl ausführen (natürlich wenn Sie Ihr Projekt nicht „MyProject“ nennen möchten, wählen Sie einen anderen Namen).

dotnet new piwebapi -n MyProject

Dadurch wird ein .NET Core 2-WebAPI-Projekt mit dem Namen „MyProject“ erstellt, das auf einem Raspberry Pi mit Windows 10 oder Ubuntu bereitgestellt werden kann. Es gibt eine Reihe von Bereitstellungs-PowerShell-Skripts im Stammverzeichnis, und Sie können hier etwas mehr darüber lesen.

Wenn Sie sich ein Beispielprojekt ansehen möchten, das anhand dieser Vorlage erstellt wurde, habe ich hier auf GitHub ein Beispielprojekt erstellt.

Wenn Sie Windows 10 IoT Core bereitstellen, denken Sie daran, einen Port in der Firewall zu öffnen, um Verbindungen zuzulassen – meine Beispielvorlage verwendet Port 5000 und kann mit dem folgenden Code geöffnet werden, wenn Sie eine SSH-Verbindung zu Ihrem Pi herstellen.

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

Oder versuchen Sie es auf die harte Tour – kochen Sie Ihr eigenes Projekt

Nachdem Sie .NET Core 2 installiert haben, öffnen Sie eine Befehlszeile, in der Ihr Projekt gespeichert werden soll, und führen Sie die folgende Codezeile aus (auch hier natürlich, wenn Sie Ihr Projekt nicht „MyProject“ nennen möchten, wählen Sie einen anderen Name).

dotnet new webpi -n MyProject

Wenn das Projekt erstellt ist, öffnen Sie den Stammordner (der den Namen „MyProject“ trägt) und bearbeiten Sie die Datei „MyProject.csproj“. Suchen Sie nach dem ProjectGroup-Knoten, der wie im folgenden Code aussehen sollte:

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

Und fügen Sie zwei zusätzliche Hinweise hinzu – RuntimeFrameworkVersion und 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>

Sehen Sie sich nun die Datei Program.cs des Projekts an und fügen Sie die Codezeile hinzu:

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

zur Hauptmethode, wie unten gezeigt:

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();
    }
}

Erstellen und Bereitstellen auf einem Raspberry Pi 3

Erstellen Sie dieses Projekt zunächst auf die übliche Weise – navigieren Sie zu dem Verzeichnis, in dem Sie Ihr Projekt erstellt haben, und führen Sie es aus:

dotnet restore .

dotnet build .

Als nächstes veröffentlichen Sie die Anwendung – das Ziel hängt davon ab, ob Sie auf einem Raspberry Pi mit Windows 10 oder Ubuntu 16.04 laufen möchten.

Veröffentlichen Sie auf Ubuntu 16.04 ausgerichtet:

dotnet publish . -r ubuntu.16.04-arm

Veröffentlichungs-Targeting Windows 10:

dotnet publish . -r win8-arm
Als Nächstes müssen wir diese Binärdateien bereitstellen:

In Ubuntu 16.04 bereitstellen

Um Ubuntu 16.04 von einem Windows-Rechner bereitzustellen, benötigen wir ein paar Dinge:
  • PuTTY installieren (das auch Tools namens pscp installiert und plink , die wir brauchen). Fügen Sie das PuTTY-Installationsverzeichnis zum Pfad Ihres Windows-Computers hinzu.
  • Die Benutzer-ID, mit der Sie sich bei Ihrem Pi angemeldet haben – meine ist ubuntu .
  • Erstellen Sie ein Verzeichnis auf Ihrem Raspberry Pi, um den WebAPI-Code bereitzustellen – ich habe ein namens „PiWebApi“ erstellt, das sich unter „/home/ubuntu/PiWebApi“ befindet „.
  • Die IP-Adresse Ihres Raspberry Pi – stellen Sie sicher, dass Ihr Raspberry Pi angemeldet und mit Ihrem lokalen Netzwerk verbunden ist – die IP-Adresse meines Ubuntu Pi ist 192.168.1.110

Führen Sie nun den folgenden Befehl aus, um die Binärdateien von Ihrem Windows-Entwicklungscomputer auf den Remote-Raspberry Pi 3 zu kopieren.

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

Führen Sie dann den folgenden Befehl auf Ihrem Entwicklungscomputer aus, um die Binärdatei auf dem Raspberry Pi ausführbar zu machen.

plink.exe -v -ssh [email protected] chmod u+x,o+x /home/ubuntu/PiWebApi/MyProject
Öffnen Sie eine SSH-Verbindung mit PuTTY zu Ihrem Pi 3 und führen Sie den Befehl aus:
./home/ubuntu/PiWebApi/MyProject
Die Konsole zeigt den folgenden Text, wenn der Webserver startet:
Hosting environment: Production
Content root path: /home/ubuntu/PiWebApi
Now listening on: http://[::]:8000
Application started. Press Ctrl+C to shut down.
Und jetzt können Sie zur folgenden Adresse navigieren, um zu sehen, wie der Raspberry Pi-Server Werte von der HTTP-GET-Anforderung zurückgibt:http://192.168.1.110:5000/api/values

Auf Windows 10 IoT Core bereitstellen

Um auf einem Raspberry Pi mit Windows 10 bereitzustellen, müssen wir:
  • Erstellen Sie ein Verzeichnis auf Ihrem Raspberry Pi, um den WebAPI-Code bereitzustellen to – Ich habe eine namens „PiWebApi“ erstellt, die sich unter „C$/PiWebApi befindet „.
  • Ermitteln Sie die IP-Adresse Ihres Raspberry Pi – stellen Sie sicher, dass Sie sich bei Ihrem Raspberry Pi angemeldet und mit Ihrem lokalen Netzwerk verbunden haben – die IP-Adresse meines Windows 10 Pi lautet 192.168.1.125

Führen Sie an einer im Stammverzeichnis Ihres WebAPI-Projekts geöffneten Eingabeaufforderung den folgenden Code aus, um die Binärdateien von Ihrem Entwicklungscomputer auf Ihr Pi zu kopieren:

xcopy.exe /y ".\bin\Debug\netcoreapp2.0\win8-arm\publish" "\\192.168.1.125\C$\PiWebApi"
Öffnen Sie nun eine ssh-Verbindung zu Ihrem Raspberry Pi – ich verwende PowerShell, um dies über das „Windows IoT Dashboard“ zu tun (wie im Bild unten gezeigt):Von dieser SSH-Verbindung aus müssen Sie nun Port 5000 in der Firewall des Raspbery Pi 3 öffnen:
netsh advfirewall firewall add rule name="ASPNet Core 2 Server Port" dir=in action=allow protocol=TCP localport=5000
Navigieren Sie zum Bereitstellungsordner auf Ihrem Raspberry Pi (in diesem Fall C:\PiWebApi) und führen Sie den folgenden Befehl aus:
./MyProject.exe
Auch hier wird der folgende Text in die Konsole geschrieben, wenn der Webserver hochfährt:
Hosting environment: Production
Content root path: C:\PiWebApi
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.

Und wieder können Sie zur folgenden Adresse navigieren, um zu sehen, wie der Raspberry Pi-Server Werte von der HTTP-GET-Anforderung zurückgibt:

http://192.168.1.125:5000/api/values