Hallo!
Vorab: In Sachen ASP.NET, Blazor und Webassembly bin ich absoluter Neuling.
Seit einiger Zeit lese ich sehr viel über die neuen Möglichkeiten, die diese Technologie bietet. Ich finde sie total spannend und vielversprechend. Ich sehe auch ein großes Potential darin, ohne seine gewohnte Programmiersprache verlassen zu müssen. Klar, HTML und CSS wollen auch beherrscht werden, aber ich muss nicht noch ein JavaScript-Papst werden.
In den letzten Tagen habe ich viele Vorträge gesehen und einige Beispiele durchstudiert, jedoch bis auf ein Beispiel, welches auf einer fertigen Vorlage basiert, habe ich noch nichts programmiert. Das kommt aber als nächstes.
Nun gibt es eine Frage, die mich beschäftigt, welche ihr mir vielleicht schon jetzt beantworten könnt. Man liest, dass eine Webassembly-Anwendung in einer Sandbox läuft und somit keinen Zugriff auf lokale Ressourcen hat. Wie löst man dann dies, wenn man doch lokal eine Datei lesen oder schreiben muss?
Im voraus vielen Dank und gesunde Grüße!
René
Hallo pollito,
IIRC: Blazor WebAssembly läuft genauso im Browser wie beispielsweise Javascript. Der Browser ist eine Sandbox. Du kannst lokal keine Daten bearbeiten, nur über den WebServer. Das wäre ein Security-Issue imho. Es gibt aber eine FileAPI, die ist aber noch im Trial: https://web.dev/native-file-system/
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Vielen Dank!
Das Projekt ist noch sehr jung und bisher nur für Chrome. Aber mir reicht es schon, wenn ich weiß, dass dies ohne weiteres vom Design her nicht möglich ist. Mir geht es in erster Linie darum, die Funktionsweise und die dahinter stehende Philosophie zu verstehen.
Wie sieht es mit Up- und Downloads aus? Also kein direkter Dateizugriff, sondern einfach den Ihnalt einer Datei in die Anwendung (durch Benutzerinteraktion) uploaden. Oder Daten per Download auf das Dateisystem speichern?
Danke un lG
René
Hallo pollito,
ich habe bisher noch keinen Up- und Download umgesetzt, aber es hindert dich nichts dran mit Javascript zu arbeiten und das umzusetzen. WASM und Javscript können miteinander reden, Blazor bietet dafür Interops an. https://docs.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-3.1
Steven Sanderson, der das ganze auch nach aussen sehr stark vorantreibt, hat noch einen vielleicht interessanten Artikel geschrieben: https://blog.stevensanderson.com/2019/09/13/blazor-inputfile/
Blazor benutzt WebAssembly. WebAssembly und Blazor sind aber erstmal zwei verschiedene paar Schuhe.
Generell beschreibt WebAssembly einen offenen Code-Standard, der von Browsern nativ(!) unterstützt wird. Du kannst Code in C++, Rust, C# schreiben und er kann im Browser ohne Plugin ausgeführt werden. Web bleibt Web. Mit allen Vor- und Nachteilen. Nur kannst du auf einmal C# (C++, Rust, ... statt Javascript) verwenden, um weite Teile deiner Logik abzubilden. Das ist natürlich für manche recht sexy. (Keine "Javascript ist gut/schlecht"-Diskussion bitte).
Zu deinem initialem Problem habe ich noch das hier https://github.com/WICG/native-file-system/issues/139 gefunden. Vielleicht hilft es.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Moin und danke!
Keine Frage, ich bin der letzte, der einen Programmiersprachenkrieg beginnen möchte. Wie ich eingangs beschrieb, bin ich auf diesem Gebiet ein absoluter Neuling. Ich freue mich aber, wenn ich neben HTML und CSS nicht zusätzlich eine weitere Programmiersprache mit samt ihrem Kosmos erlernen muss.
Der Artikel von Steven Sanderson ist in der Tat super spannend´– danke dafür!
Zu deinem initialem Problem habe ich noch das hier
> gefunden. Vielleicht hilft es.
Auch total spannend.
Nun muss ich beginnen, die ersten, zarten Schritte zu machen.
Lieben Dank und ein schönes Wochenende!
René
Hi
HTML und CSS sind keine Programmiersprachen sondern Sprachen um Formate und Gestaltung von Hypertext zu beschreiben.
Eine Programmiersprache beschreibt die Logik eines Programms das auf einer universellen Maschine zur Speicherung und Verarbeitung von (digitalen) Daten ausgeführt wird.
Also schlichtweg ein Prozessor, CPU, AMD, ARM, Intel usw. aber auch eine ausgedachte CPU die es gar nicht als Chip gibt. Dann spricht man von einer Virtuellen Maschine.
WASM ist KEINE Programmiersprache sondern eine Virtuelle Maschine die einen bestimmten OP Code ausführen kann. Um ein Programm für diese VM zu schreiben benötigst du einen Compiler der eine bestimmte Programmiersprache (C, C++, C#, JAVA, Rust, was auch immer...) in den WASM OP Code übersetzt. Das Resultat ist eine Datei (Binärcode) die in den Speicher der WASM VM geladen wird und dann ausgeführt werden kann.
Um also Programme für die WASM im Browser schreiben zu können brauchst du eine Infrastruktur: eine IDE um Programm Code eingeben zu können, einen (oder mehre) Compiler, einen Debugger um auf die Suche nach Fehlern zu gehen.
(Ich benutze dafür VS Code, was ich an dieser Stelle wirklich empfehlen kann.)
Eine WASM Anwendung besteht aus mehreren Teilen:
einem Teil der die Benutzeroberfläche (UI) beschreibt. Das ist i.d.R. der HTML/CSS Teil
die eigentliche Logik des Programms die sich wiederum aus Javascript und WASM Teilen zusammensetzt.
Und, da wir uns ja in einem Vernetzten Szenario befinden, auch noch einen oder mehrere (Web) Server die Daten an die Anwendung ausliefern bzw. empfangen.
Aktuell gibt es meines Wissens nur eine wirklich komplett integrierte Technologie mit der Client seitige WASM Anwendungen gebaut werden können: C# BLAZOR Web Assembly
(deswegen sind wir ja auch auf diesem Forum)
Danke! Das ist schon klar. Ich programmiere bisher Desktop-Anwendungen unter Zuhilfenahme von (früher) Windows-Forms und heute WPF. Parallel dazu auch SQLWindows (Team Developer) von Gupta. Ich habe nicht behauptet, dass HTML und CSS Programmiersprachen seien, sondern dass ich das lernen muss, wie vor vielen Jahren XAML für WPF.
Ich sehe es schon, der Weg wird steinig werden, aber das Lamentieren hilft kein bisschen weiter – da müssen wir durch.
Schönes Wochenende!
René
Aktuell gibt es meines Wissens nur eine wirklich komplett integrierte Technologie mit der Client seitige WASM Anwendungen gebaut werden können: C# BLAZOR Web Assembly
Nö, gibt auch JavaScript, C++, Rust... Frameworks, die all das können, was auch Blazor Client Side kann.
Aber das ist ja nicht Thema dieses Threads.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Oki
Dann probier alt einfach mal Blazor aus.
UI ist halt HTML mit Bootstrap aber eigentlich alles recht gut verständlich.
Nochmal zu deiner ursprünglichen Frage.
Es ist schon möglich mit PWAs Dateien lokal zu halten und zu bearbeiten. Aber halt nicht via Filesystem direkt auf die Platte sondern indirekt. Also erst Upload, der wird dann lokal im Browser Cache gehalten, auch wenn der Rechner Offline ist. GDocs ist ein Beispiel dafür und funktioniert gut. Wobei der Sync via GDrive erfolgt.
Ist das für dein Anwendungsszenario unbedingt nötig?
Nicht wirklich. Ich/wir bin/sind am Ausloten der Möglichkeiten, die diese (für uns) neue Technologie bietet.
Wir haben schon die Notwendigkeit, Dateien auf dem Filesystem zu bearbeiten, das kann aber auf den Server ausgelagert werden. Wenn ich das richtig verstanden habe, gelten bei ASP.Net Core diese Einschränkungen nicht.
Ich persönlich hoffe, dass diese Technologie keine Eintagsfliege wird – kann mir auch nicht wirklich vorstellen. Daher setzt sich diese Technologie gegenüber den anderen, meist auf JavaScript basierenden Frameworks, bei uns gedanklich durch.
Ich bleibe euch dann sicher noch eine Weile erhalten und werde euch ab dem Herbst des öfteren mit diesem Thema nerven.
Liebe Grüße und ein schönes Wochenende!
René
Also erst Upload, der wird dann lokal im Browser Cache gehalten, auch wenn der Rechner Offline ist. GDocs ist ein Beispiel dafür und funktioniert gut.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo pollito,
Wenn ich das richtig verstanden habe, gelten bei ASP.Net Core diese Einschränkungen nicht.
Das verstehe ich nicht ganz. Welche Einschränkungen gelten bei ASP.NET Core nicht?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Das verstehe ich nicht ganz. Welche Einschränkungen gelten bei ASP.NET Core nicht?
Ich meine den Zugriff auf Ressourcen wie z. B. Dateien. Die ASP.Net-Anwendung kann nach Gusto auf Dateien auf dem Server zugreifen. Für unsere Anwendung dürfte das ausreichend sein.
Ich habe heute einen Online-Kurs bei Udemy gebucht:
Programando en Blazor - ASP.NET Core 3.2
Sollte dir das Spanisch vorkommen, ist es auch! Mein Spanisch ist weitaus besser als mein Englisch und in Deutsch gibt es sowieso nichts. Ich hoffe nur, dass ich jetzt genug Zeit neben der Arbeit finde, um mir das reinzuziehen.
Grüße
René
Puh, hier sind sehr sehr viele Basics aufzuholen.
Nein, eine ASP.NET Anwendung kann (oder zumindest sollte) keine lokalen Dateien bearbeiten. Nirgends.
Eine Webanwendung sollte auf einem Server immer so konfiguriert sein, dass alle Dateien im Web-Verzeichnis read-only sind - ganz ähnlich wie bei jeder Anwendung, auch auf dem Desktop.
Und überhalb des Web-Verzeichnis sollte es sowieso keinerlei Access geben.
Alles Security Basics für das Hosten von Webapplikationen.
Im Web arbeitet man daher mit entsprechenden Storages (zB. Azure Blob Storage, AWS S3 und wie sie nicht alle heissen); nicht direkt mit dem Dateiverzeichnis der Anwendung.
Und ob ein Storage nachher über eine Webanwendung oder über eine Client-Anwendung angesprochen wird: völlig egal.
Nimm Dir für die Basics Zeit, ansonsten wirds mit der Evaluierung und der Konzeption schwierig.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ne, hier reden wir gerade, was dieses Dateithema angeht, aneinander vorbei. Es kann auch sein, dass ich mich nicht fachgerecht genug ausdrücke und daher zu Missverständnissen kommt – ich schrieb am Anfang, dass ich auf diesem Gebiet ein absoluter Neuling bin.
Eine auf einem Server laufende ASP-Anwendung darf wohl uneingeschränkt auf lokale Ressourcen zugreifen – mehr wollte ich auch nicht sagen.
Unsere Server-Anwendung verarbeitet Dateien, die auf einen Server abgelegt werden – das meine ich. Hier tat sich die (theoretische) Frage auf, wie eine Blazor-Webassembly-Anwendung auf einem Endgerät auf lokale Dateien zugreifen könnte. Diese Frage wurde jedoch sehr gut beantwortet – eigentlich erhielt ich netterweise sogar weiterführende Infos, die dieses Thema viel breiter aufgreifen.
Und ja, wir müssen uns mit Basics beschäftigen, da dieses Thema wir bis dato nicht hatten. Unser Schwerpunkt liegt bisher im Client-Server-Umfeld mit fetten Windows-Clients und SQL-Datenbanken. Das dies nicht mehr Stand der Technik ist, ist es uns klar. Nun steht bei uns für die nächsten Jahre sowieso ein Re-Design unserer Hauptanwendung an, so dass wir diesen Zwang nutzen wollen, um auf eine Web-Technologie umzusatteln.
Danke und viele Grüße!
René
Eine auf einem Server laufende ASP-Anwendung darf wohl uneingeschränkt auf lokale Ressourcen zugreifen – mehr wollte ich auch nicht sagen.
Nein, darf sie nicht (so ohne weiteres). Siehe Begründung in mein Beitrag.
Eine Web-Anwendung ist bis auf wenige Ausnahmen immer im Multi-Threading, sodass man bei einem direkten Dateizugriff sehr viel mehr beachten muss als bei einer kleinen simplen Desktop-Anwendung - von den Sicherheitskonzepten einer Webanwendung ganz zu schweigen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Angenommen ich will das so machen, wie würde man das machen?
Eine seperate Anwendung, die lokal einen HTTP API Endpoint aufmacht und intern queuing benutzt? Und die dann halt mit der ASP.NET Anwendung ansprechen? Oder gibt es da ein bessere Protokoll dafür?
Von was sprichst Du?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Von genau seinem Beispiel,
angenommen ich will mit der ASP.NET Anwendung auf dem selben Host auf Dateien oder ähnliches zugreifen. Würde man dann eine zweite Anwendung schreiben mit der die ASP.NET Core Anwendung kommuniziert und die das erledigt oder nochmal ganz anders?
Kommt auf die Gesamtanforderungen an. Gibt nicht nur einen Weg.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code