2
votes

Ajouter Blazor côté client à l'application ASP.NET MVC5 existante

Ayant une application ASP.NET MVC5 existante qu'il n'est pas possible de réécrire en une seule fois, comment pouvons-nous commencer à incorporer (côté client) Blazor pour remplacer des parties de cette application?

EDIT: Nous aurions besoin d'avoir des pages dont certaines parties sont MVC5 et d'autres parties sont Blazor où cela fonctionnerait de manière transparente pour l'utilisateur final.

D'après ce que j'ai trouvé jusqu'à présent, la meilleure option (et la seule?) Serait d'héberger Blazor sur un site différent et de l'inclure en tant qu'iframe dans le site d'origine en utilisant l'interopérabilité JavaScript pour communiquer des données entre les deux sites.

Je n'ai trouvé aucun exemple pour cela, faites-le moi savoir si vous en connaissez ou avez une autre idée qui pourrait fonctionner!


0 commentaires

3 Réponses :


1
votes

L'iFrame semble maladroit, mais à ma connaissance, l'application MVC 5 n'a aucun moyen de référencer et d'utiliser l'application Blazor WASM.

Ne serait-il pas possible pour vous de simplement configurer une troisième application MVC proxy pour gérer le routage et l'état entre les deux applications? Vous pouvez extraire votre logique métier de l'application MVC actuelle vers une bibliothèque .Net Standard que les deux projets pourraient partager.

Et s'ils utilisaient tous les deux la même API backend, vous n'auriez pas besoin de faire grand-chose pour commencer le transfert. Une fois que tout a été déplacé vers la nouvelle application client Blazor, vous pouvez supprimer l'application MVC et le proxy.

Ce serait similaire à l'implémentation d'un Strangler Pattern pour le transfert d'une API Web monolithique vers des microservices.


5 commentaires

Pourquoi MVC5 aurait-il besoin de référencer une application Blazor? L'application Blazor s'exécuterait du côté client, comme n'importe quelle application Angular / React / Vue / VanillaJS. Le côté serveur n'est pas pertinent.


Ce n'est pas moi qui ai posé la question initiale.


Oui, Mason, vous avez raison de dire que le côté serveur n'est pas pertinent, mais mon argument était que pouvoir référencer un WebAssembly serait une fonctionnalité intéressante à avoir - un peu comme pouvoir référencer une classe Razor, mais ce n'est pas une possibilité .


Une troisième application MVC proxy semble intéressante, avez-vous des exemples ou des articles pour me donner une longueur d'avance pour l'implémenter? J'ai modifié ma question pour spécifier que j'aurai besoin d'une page composée de parties de l'application MVC5 d'origine et de Blazor.


Avec votre modification, je ne pense pas que vous aurez beaucoup d'autre choix que d'utiliser des iFrames. Le proxy ne fonctionne vraiment que si vous pouvez créer une application MVC qui transfère le routage vers les deux applications hébergées sur des serveurs différents. Vous auriez votre application héritée, puis l'application Blazor, mais le proxy gérerait le routage. Mais comme vous devez mélanger les composants de la page, l'iFrame est probablement la voie à suivre.



0
votes

Je voulais juste mettre à jour cette question avec ce que nous avons trouvé comme une solution satisfaisante maintenant. Nous avons développé une preuve de concept fonctionnelle de cette façon de combiner Blazor et toute autre technologie côté client. Il utilise un IFrame distinct pour l'application Blazor et l'API JavaScript PostMessage pour éviter les problèmes de sécurité (même origine). Cela fonctionne plutôt bien et c'est un bon moyen d'échanger des parties de l'ancienne application MVC5 avec des parties écrites en Blazor. J'espère que je vais bientôt en faire un bref résumé dans un article de blog.


0 commentaires

0
votes

312/5000 C'est dommage qu'il n'y ait que la solution iframe, qui me rappelle le temps passé. Je suis un passionné de l'architecture SPA, et je dois dire que la meilleure solution que j'ai vue à cet égard est la réalisation de composants Web. Il est triste que Blazor ne prenne pas en charge les composants Web. J'espère que cela arrivera bientôt.


0 commentaires