

J’ai été très très emballé lorsque j’en ai entendu parlé pour la premiière fois de Blazor. Bien que j’attendais à ce qu’il soit tué dans l’oeuf. Car au début, c’était un side project Microsoft sans prétention. Quelle idée, faire du web avec du C# ? et pourquoi pas VbScript tant qu’on y est… 🙂
Nan mais sans déconner, le js ça va deux minutes. Donc faire une web app en C# je signe.
J’ai donc taté du blazor en mode tuto au début. Puis j’ai oublié. Et me revoila !
Je vais présenter ici mes découvertes. En fait j’ai fait des erreurs et je voulais les écrires pour que qq évite de galérer comme moi.
Bon la ça déconne plus. Blazor est officiellement inclu dans .net (depuis .net Core 3.1 il me semble) et donc on peut code pour de vrai, pour de vrai client. Et la ça change tout. Fini les tutos.
Alors on commence avec un nouveau projet sous VS2022. Et celui ci nous propose deux solutions :
Ce type de projet est n’y plus n’y moins qu’un projet ASP.net Core avec du Razor en couche de présentation. Si auparavent vous avez fait du web.form pour les plus vieux, du MVC5 ou de l’Asp.net Core vous allez pas être trop perdu.
Pour les autres, on est sur une application classique de type Client (browser) Server (IIS, Apache, Nginx, Kernel…)
En ajoutant une couche SignalR vous avez un site web qui déboite. Mais qui ne gère pas le offline.
Le vrai plus est la pour moi. On peut envisager de faire une application web PWA avec .net. Et ça pour un dev Microsoft de 20 ans, c’est juste de la bombe pour moi. Et qui plus est, qui peut tourner sur un OS Linux. (voir articles sur les coûts)
Donc Blazor Wasm pour les intimes et une tuerie. On va pouvoir utiliser la puissance du language C#, les outils VS et VS Code, et toutes les libs qu’on a l’habitude d’utiliser depuis des années.
Je vais parler dans le reste de l’article que de Blazor Wasm.
L’objectif de l’article est de vous amener à bien comprendre comment Balzor fonctionne. D’un point de vue architecture applicative et d’un point de vue réseau/serveur.
Lorsque l’on créer un nouveau projet, VS2022 nous demande si on souhaite héberger le site via Asp.net Core. (kernel) Il nous demande aussi si l’on souhaite utiliser des fonctionnalités PWA. Pour ma part oui pour les deux.
Voici la différence entre un projet sans hébergement Asp.net Core (à droite) et un projet avec :
La partie commune BlazorApp1.Client et BlazorApp2 constituent l’application web PWA. On y trouve du code C#. Mais au final on aura que du code html/css/js pure en sortie et un dossier _framework, qui lui par contre contient qq dll indispensable au bon fonctionnement de blazor.
Voici une publication : On a un webconfig et un repertoire wwwroot qui contient ceci:
C’est la que ca devient chelou. Si on se place coté browser, et surtout en mode déconnecter, on a pas besoin d’un serveur (web, pure static de fichier), sauf bien entendu lors du premier chargement. Ensuite on peut très bien s’en passer.
Mais alors on a quoi coté serveur ? Bonne question. C’est la que l’hote Asp.net Core intervient.
Comme on peut le voir dans le premier projet, on a un projet Server et un projet Shared.
Shared est juste un projet de classe, rien de méchant on partage du code commun avec les deux autres projets.
Le projet Server par contre est le code qui va gérer la partie serveur, comme son nom l’indique. Et lui aura aussi la partie cliente. Regarder les sorties d’une publication du projet serveur :
On retrouve bien wwwroot de la partie cliente !
Ceux sont ces fichiers static que le serveur va gérer par la suite avec le browser.
Lorsque l’on travaille en debug local, on ne fait pas trop attention à tout cela.
Mais dès lors qu’on passe en prod c’est plus la même histoire.
La ou j’ai merdé, c’est de considérer le dossier bin/Release comme ma sortie pour la prod. Erreur !
Allez y faire un tour, on que la génération du projet courant. Ce qui est logique.
Mais la petite nouveauté c’est la publication qui intègre le projet Client dans la sortie du projet Server.
Autre erreur, le ports.
En local on peut configurer les ports des projets Client et Server via le fichier properties/launchSettings.json.
Et on peut executer les deux projets. Modifier les ports de ces fichiers et lancer un run.
Mais dans tous les cas ceux qui comptent pour la prod ceux sont ceux du projet serveur. Et moi comme un con, j’avais le projet Client comme projet de démarrage. A éviter car je comprennais plus rien.
Voila, j’y ai passé presque deux jours (config Ngix sur linux). Donc je résume un peu. Je me disais que ca vallait un billet.
++
Un commentaire