Laden...

Lokal hosten eines "https" Server auf Net Maui

Letzter Beitrag vor einem Jahr 12 Posts 1.268 Views
Lokal hosten eines "https" Server auf Net Maui

Hallo zusammen, 
Ich würde gern lokal einen Server mit Maui hosten. Auf den Server sollen Aufrufe aus einer "WebView", aus der selben App gemacht werden. Ich habe bereits Tests mit "EmbedIO" gemacht, damit gibt es allerdings Probleme mit "https" auf den Geräten die nicht Windows nutzen. Gibt es eventuell noch eine andere Lösung, für das Hosten eines Servers oder eine Lösung für EmpedIO?

MAUI ist nur ein App Model sowie die UI. MAUI hat keinerlei Runtime-Verantwortung.
Du kannst jede Art von In-Process HTTP Server verwenden, um einen HTTP Endpunkt anzubieten.

Du musst nur darauf achten, dass der HTTP Server das Betriebssystem drunter unterstützt.
In einer Mobile App auf iOS und Android wird Dein Vorhaben nicht funktionieren, weil die beiden Betriebssysteme Apps nicht das Hosten von Endpunkten erlaubt / sehr stark limitiert.

Unter Windows Desktop geht das (einfacher), unter UWP auch wieder nicht.

Maui ermöglicht mir das erstellen von App' s plattformübergreifend, oder? Nun möchte ich auf Basis von Maui eben eine Applikation erstellen, die plattformübergreifend arbeitet. Diese Applikation soll, sowohl auf Windows, wie Android und iOS ( je nachdem wo die App läuft) einen lokalen Server hosten (als Backend für die Applikation ), dem ich auch aus der selben App Requests senden kann. Diese Antwort möchte ich dann über ein WebView anzeigen. Das Hosten ist mir bereits gelungen unter Windows mit EmbedIO, aber es direkte Hosten auf Android ging nur bedingt. Hir konnte ich den Server erreichen, aber nur aus dem Crome- Browser.

Ein Crossplatform Framework in diesem Fall bietet Dir den kleinsten gemeinsamen Nenner. Im Falle von MAUI und Konsorten sind das die Laufzeit und die UI.
Ein solches Framework muss sich aber genauso an die Regeln des Betriebssystems halten, wie jede andere Anwendung auch.

In den meisten Fällen ist das auch so, dass Du pro Betriebssystem noch einen gewissen Customized Code hast.

Wenn Betriebssystem A Dir eine Funktion bietet, dann kannst Du die vielleicht mit MAUI verwenden; aber wenn Betriebssystem B Dir das nicht anbietet, dann kann Dir das MAUI auch nicht bieten. Die Regeln können nicht gebogen werden.
Davon abgesehen ist es nicht die Idee oder Aufgabe von MAUI, Dir jede Art von Betriebssystemfunktion zur Verfügung zu stellen.

Du musst also entweder pro Betriebssystem Custom Code erstellen, oder einen Weg finden, bei dem Deine zu unterstützende Betriebssysteme eben unterstützt werden.

Eine API in einer Mobile App ist alleine durch das Betriebssystem in den meisten Fällen nicht möglich. Das geht alleine aufgrund des App Modells nicht; denn eine App wird in einen Schlafzustand gebracht, wenn diese nicht aktiv verwendet wird.
Davon abgesehen kannst Du in den meisten mobilen Umgebungen keinen aktiven Listener erstellen, wie man es unter Windows Desktop gewohnt ist.

Server und App sollen eins sein! Der Server soll im Bauch der App laufen. Die UI soll der Client sein und in einer WebView in HTML gerendert werden. D.h. die UI soll sich über den Server mit dem Backend (Buisnessmodel) unterhalten können und das soll Platformübergreifend funktionieren.

Würde an Deiner Stelle erstmal evaluieren, ob Dein Wunschvorhaben so überhaupt von den Betriebssystemen unterstützt wird.
Ich glaube, dass Du in Limits der mobilen Betriebssysteme läufst und Dein Vorhaben so nicht (auf allen Betriebssystemen in der Form) funktioniert; was nicht an MAUI liegt.

Server und App sollen eins sein! Der Server soll im Bauch der App laufen.

Warum dann überhaupt den (Http)Service in der App?
Der ist den dem Fall überhaupt doch nicht notwendig.

Im allgemeinen läuft ein Service im Internet/Intranet und der Client konsumiert diesen dann.

Es geht darum eine "Schnittstelle" für bestehendes zu erstellen.

Wäre es nicht sinnvoller das fundamental richtig zu machen, statt Workarounds zu verfolgen?
Is ja kein nachhaltiges Vorgehen.

Das Ganze sieht so aus:

Es gibt eine bestehende .NET Framework Assembly, die in einer Rahmenanwendung unter Windows läuft. Dort ist die UI in WinForms und WPF modelliert. Das ganze Projekt ist in MVVM gehalten. Die Rahmenanwendung ist an die .NET Runtime und das .NET Framework gebunden. Da MVVM verwendet wird, konnten der Businesscode und fast alle ViewModels in der aktuellen Xamarin.Forms App wiederverwendet werden. Aktuell gibt es also eine UI in XAML in der App (Xamarin.Forms) und eine UI unter Windows mit WinForms/WPF. Die Anforderung ist, dass jetzt ein UI Code geschrieben wird, der überall läuft (Windows/Android/iOS). Mit .NET MAUI ist das nicht möglich, da wir an das .NET Framework unter Windows gebunden sind. Wenn jetzt also z.B. ASP.NET zur verwenden kommen könnte, um alle 3 Welten zu bedienen, dann müsste die UI einmal in HTML geschrieben werden (mit React) und hätten alle Neuerungen direkt für App als auch unter Windows verfügbar.

ASP.NET Core in MAUI als Server Side App ist nicht. Wird nicht unterstützt.

Du kannst nur Blazor Views einbinden, aber keinerlei Server Aktivität. Das lassen auch die App Runtimes nicht zu.

Die Wahrscheinlichkeit, dass deine Wunschidee funktioniert, ist gering. Gerade bei App Runtimes musst Du dich sehr ab die Vorhaben vom Betriebssystem halten, und die sind teilweise unterschiedlich- MAUI hin oder her.

Was genau ist hier das Problem?
Wollt ihr nur eine UI haben, dann wäre MAUI ein Weg weitere müsstet ihr ggf. evaluieren.

.NET Framework ist die alte Welt, hier sollte man schon seit längerem mit der Migration anfangen.
.NET Standard erleichtert euch dies auch ein gutes Stück weit, falls man den Code unter beiden Welten braucht.
Wenn ihr keinen harten Abhängigkeiten die nur für .NET Framework laufen, dann spricht auch nichts gegen einen kompletten Umstieg auf .NET 6/7/8+.

Wir sind gerade selbst dabei eine Web Anwendung auf .NET 7 zu migrieren und direkt per Docker auch noch als Container zu verteil.
Damit lösen wir uns auch von unserem einzigen Mono Web.
Ist in dem Fall aber auch einfach, da die Anwendung "nur" aus einem Service, einer Handvoll Tasks und einer Java Anwendung besteht.

Wie Abt aber schon schreibt, würde ich den Ansatz mit einem Web Server In App wieder verwerfen.
Spätestens wenn es in die App Stores z.B. bei Apple geht, wird die App nach einer genauen Prüfung vermutlich abgelehnt.
Dort sind die Vorgaben sehr strikt und solche Lösungen auch nicht gern gesehen.

Nachtrag:
Laut Stackoverflow kann ein Http Server max. 10 Min. laufen.

Link:
https://stackoverflow.com/questions/20698287/create-an-ios-app-that-runs-as-web-server-in-background

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.