Relier les points : intégrer WPF, ASP.NET Core et gRPC
Par Mirko Peters ·
Introduction au développement .NET moderne Avantages et défis de l’intégration Vous constatez de nombreux avantages à intégrer WPF, ASP.NET Core MVC et gRPC dans votre projet…
Traduit automatiquement par IA à partir de l'article original. Lire l'original en anglais
![Cover: D365FO Integration Architecture with Anitha Eswaran [MVP-MCT]](https://d3wo5wojvuv7l.cloudfront.net/t_rss_itunes_square_1400/images.spreaker.com/original/79f1f9d5047eab2e63aaf331f8bd794c.jpg)
Introduction au développement .NET moderne : intégration
Avantages et difficultés
Vous constatez de nombreux avantages à intégrer WPF, asp.net core mvc et grpc dans vos projets. Cette approche vous offre une solution unifiée pour la communication entre le bureau, le web et les services. Le podcast m365.fm Modern .NET Development Podcast, animé par Mirko Peters avec la participation de l’MVP Microsoft Gábor Ruzsinszki, montre souvent comment cette intégration vous aide à créer des applications modernes et évolutives.
Voici un tableau présentant les principaux avantages de la combinaison de ces technologies :
| Avantage | Description |
|---|---|
| Performances | asp.net core figure parmi les frameworks web les plus rapides. Il prend en charge HTTP/2 et grpc pour des communications efficaces. |
| Scalabilité | L’intégration vous permet de créer des microservices et des API RESTful. Cela renforce la scalabilité de vos applications. |
| Capacités multiplateformes | WPF pour le bureau et asp.net core pour les applications web vous offrent une expérience de développement unifiée sur toutes les plateformes. |
Vous devez aussi faire face à certains défis. Vous devez gérer la synchronisation des données entre WPF et asp.net core mvc. Vous devez garantir une expérience utilisateur cohérente entre le bureau et le web. La sécurité et l’authentification deviennent plus complexes lorsque vous utilisez grpc sur asp.net core pour la communication entre services. Vous devez également gérer le versionnement et les mises à jour de chaque partie de votre solution.
Astuce : vous pouvez utiliser des bibliothèques partagées pour garder une logique métier cohérente entre WPF, asp.net core mvc et grpc sur asp.net core. Cela réduit la duplication de code et facilite la maintenance de votre solution.
Scénarios concrets
Les exemples concrets sont très instructifs. De nombreuses organisations ont migré des applications WPF héritées vers asp.net core mvc et grpc sur asp.net core. Ces migrations vous montrent comment moderniser vos logiciels et améliorer leurs performances.
Voici un tableau présentant quelques exemples :
| Organisation | Détails de la migration | Axe principal |
|---|---|---|
| Abto Software | Migration d’un outil d’analyse de santé de bureau (WPF) vers le web (Blazor WASM). 300 000 lignes de code. Le moteur de calcul en C# (bibliothèque partagée) a été conservé, mais l’interface a été réécrite. | Les performances étaient critiques. |
| Amazon Q Developer | Transformation d’une application de bureau limitée à Windows en application web moderne et multiplateforme, à partir d’exemples WPF existants. | Gestion d’un code hérité complexe. |
Vous partez peut-être d’une application de bureau WPF sur laquelle vos utilisateurs comptent chaque jour. Vous souhaitez toucher davantage d’utilisateurs, et vous créez donc une version web avec asp.net core mvc. Vous utilisez grpc sur asp.net core pour connecter vos applications de bureau et web à des services back-end partagés. Cette architecture vous permet de réutiliser votre logique métier et de garder vos données synchronisées.
Vous pouvez également utiliser grpc pour connecter les microservices de votre solution. grpc sur asp.net core offre une communication rapide et fiable entre les services. C’est important lorsque vous avez besoin de mises à jour en temps réel ou de hautes performances.
En suivant ces modèles d’intégration, vous créez des solutions souples et pérennes. Vous pouvez ajouter de nouvelles fonctionnalités, prendre en charge davantage de plateformes et faire évoluer vos applications au rythme de vos besoins.
Évolution et modernisation de .NET
De .NET Framework à .NET Core
Vous avez vu .NET évoluer considérablement au fil des années. Le passage de .NET Framework à .NET Core a apporté d’importantes améliorations pour les développeurs et les entreprises. Lorsque vous utilisez .NET 6 ou .NET 7, vos applications s’exécutent plus rapidement et consomment moins de mémoire que les versions antérieures. Vous constatez un meilleur débit et des temps d’exécution plus courts, ce qui est utile pour les applications web à fort trafic. Des moteurs d’exécution optimisés et de nouvelles fonctionnalités d’exécution rendent votre code plus efficace. Chaque nouvelle version apporte davantage de rapidité et une meilleure gestion de la mémoire. Vous pouvez aussi déployer vos applications sur différents systèmes d’exploitation, ce qui simplifie votre travail.
Voici un tableau qui présente les principales différences en matière de déploiement et de maintenance entre .NET Framework et .NET Core :
| Aspect | .NET Framework | .NET Core |
|---|---|---|
| Souplesse de déploiement | Limité à IIS ou à Windows Server | Prend en charge les déploiements autonomes et l’hébergement cloud |
| Rentabilité | Nécessite une licence Windows et un hébergement propriétaire | Prend en charge Linux, ce qui réduit les coûts d’infrastructure |
| Maintenance | Principalement propriétaire, avec des mises à jour limitées | Open source, avec une communauté active et des mises à jour fréquentes |
| Améliorations des performances | Mises à jour moins fréquentes | Améliorations continues des performances et correctifs de sécurité |
Multiplateforme et natif cloud
Vous pouvez désormais créer et exécuter des applications .NET sous Windows, Linux et macOS. Cette souplesse multiplateforme vous offre davantage de choix de déploiement. Vous pouvez utiliser des microservices et des conteneurs pour découper vos applications en parties plus petites. Cela facilite la mise à l’échelle et la mise à jour de vos solutions. Une intégration poussée avec Azure vous permet d’utiliser des outils et des services conçus pour les développeurs .NET. Vous pouvez aussi recourir à l’informatique sans serveur avec Azure Functions, ce qui vous permet de vous concentrer sur votre code plutôt que sur la gestion des serveurs. Ces fonctionnalités vous aident à créer des applications performantes et évolutives, bien adaptées au cloud. L’écosystème de développeurs solide et les outils modernes rendent votre travail plus rapide et plus fiable.
Moderniser les applications héritées
Vous disposez peut-être d’applications héritées qui doivent être mises à jour pour rester utiles et sécurisées. La modernisation des applications héritées commence par un plan clair. Commencez par recenser toutes vos dépendances, comme les bibliothèques tierces et les DLL internes. Recherchez ensuite les anciens modèles, comme les pages WebForms ou l’authentification par formulaires. Contrôlez la qualité de votre code et repérez les composants fortement couplés ou les API obsolètes. Décidez ensuite si vous souhaitez réécrire certaines parties de votre application ou remplacer les anciennes bibliothèques. Migrez vers les technologies ASP.NET modernes, comme Razor Pages ou ASP.NET Core MVC. Adoptez de nouvelles pratiques, telles que l’injection de dépendances, les tests automatisés et les pipelines CI/CD. Utilisez des outils comme .NET Upgrade Assistant pour vous accompagner dans le processus.
La modernisation des applications héritées peut demander du temps et des ressources. Pour une application métier unique comptant de 50 000 à 100 000 lignes de code, comptez quatre à six mois. Les coûts se situent souvent entre 100 000 et 1 000 000 de dollars, avec une médiane d’environ 180 000 dollars. Si vous gérez un portefeuille de nombreuses applications héritées, le processus peut durer deux à trois ans, découpé en projets plus petits. Vous gagnez en performances, en sécurité et en facilité de maintenance lorsque vous modernisez vos systèmes hérités.
Moderniser les applications de bureau WPF
WPF dans le développement d’entreprise
Vous utilisez WPF pour créer rapidement des applications de bureau. Visual Studio vous fournit des outils pour concevoir et coder avec facilité. De nombreuses organisations choisissent WPF parce qu’il simplifie le déploiement. Vous pouvez distribuer les applications via des lecteurs partagés ou des programmes d’installation ClickOnce. Cela fait de WPF un choix privilégié pour les outils internes et les prototypes rapides.
WPF excelle lorsque vous avez besoin de performances graphiques élevées et une grande réactivité. Vous gérez avec WPF de grands volumes de données ou des visualisations complexes. Il s’impose comme une alternative solide aux technologies web.
Microsoft continue de faire évoluer WPF. Vous voyez apparaître de nouvelles fonctionnalités, comme l’accélération matérielle et le thème Fluent pour une interface moderne. WPF convient aux applications métier critiques dans de nombreux secteurs. On recense environ 500 000 à 1 000 000 d’applications activement développées dans le monde avec WPF. Vous créez et déployez vos applications rapidement avec WPF, qui demande moins de configuration que d’autres piles technologiques.
Stratégies de migration
Vous devez souvent moderniser d’anciennes applications Windows Presentation Foundation. Vous souhaitez moderniser vos applications de bureau WPF pour profiter des nouvelles fonctionnalités de .NET.
Migration vers .NET Core/5+/6+/8+
Vous commencez par sauvegarder vos projets. Vous installez l’Assistant de mise à niveau .NET. Vous faites un clic droit sur votre projet dans l’Explorateur de solutions et sélectionnez Mettre à niveau. Vous choisissez entre une mise à niveau sur place ou côte à côte. Vous sélectionnez le framework cible et les composants à mettre à niveau.
Vous préparez votre environnement avec Visual Studio 2019 et .NET Core 3.0. Vous vérifiez la compatibilité des API à l’aide de l’analyseur de portabilité .NET. Vous créez un nouveau fichier .csproj pour votre projet. Vous spécifiez le nom de l’assembly et l’espace de noms par défaut. Vous désactivez la génération automatique d’AssemblyInfo.
Les outils que vous utilisez pour la migration comprennent :
- .NET
- Visual Studio 2022 v17.0+
- DevExpress Project Converter
- Analyseur de portabilité .NET
Uno Platform pour le multiplateforme
Vous modernisez WPF en explorant des solutions multiplateformes. Uno Platform vous permet d’exécuter des applications de type WPF sous Windows, Linux, macOS, iOS, Android et WebAssembly. Vous réutilisez votre logique métier et vos composants d’interface. Vous touchez davantage d’utilisateurs et d’appareils avec moins d’efforts. Uno Platform vous aide à moderniser vos applications de bureau pour un public plus large.
Intégration avec ASP.NET et gRPC
Vous modernisez vos applications de bureau WPF en les connectant aux technologies web et de services. Vous utilisez ASP.NET Core pour créer des API web et des interfaces utilisateur. Vous utilisez gRPC pour une communication rapide et fiable entre votre application de bureau et les services back-end. Vous partagez la logique métier entre WPF, ASP.NET et gRPC. Vous synchronisez vos données et améliorez les performances. Vous modernisez votre flux de travail en intégrant WPF aux piles web et de services modernes.
ASP.NET Core MVC pour les applications web
Présentation d’ASP.NET Core
Vous utilisez ASP.NET Core MVC pour créer des applications web modernes, rapides, sécurisées et faciles à maintenir. Ce framework vous offre une manière unifiée de créer à la fois des interfaces utilisateur web et des API. Vous pouvez exécuter votre application ASP.NET Core sous Windows, Linux ou macOS. La nature multiplateforme d’ASP.NET Core vous permet de déployer vos applications dans de nombreux environnements, y compris le cloud.
Voici un tableau présentant les principales fonctionnalités qui font d’ASP.NET Core MVC un choix solide pour le développement web :
| Fonctionnalité | Description |
|---|---|
| Modèle de développement unifié | Un framework unique pour les interfaces web et les API. |
| Évolutivité | Architecture légère et modulaire, capable de traiter plus de 7 millions de requêtes par seconde. |
| Fonctionnalités de sécurité | Protection intégrée contre les attaques CSRF, XSS et par injection SQL, ainsi qu’une authentification de niveau entreprise. |
| Efficacité du développement | Unifie MVC et Web API dans un seul modèle de programmation, ce qui réduit la courbe d’apprentissage et la maintenance. |
| Souplesse de déploiement | Nature multiplateforme et excellent support de Docker pour des déploiements cohérents dans tous les environnements. |
| Fondation MVC | Utilise le modèle architectural Model-View-Controller pour une séparation claire des responsabilités. |
Vous commencez à prendre en main ASP.NET Core en installant le SDK .NET et en configurant votre premier projet. Le processus de configuration d’ASP.NET Core est simple et bien documenté. Vous pouvez utiliser Visual Studio ou la ligne de commande pour créer votre projet ASP.NET Core MVC.
Création d’API
Vous créez des API avec ASP.NET Core MVC pour connecter vos applications web, vos applications mobiles et vos clients de bureau. Le framework prend en charge la conception RESTful, ce qui vous aide à organiser vos points de terminaison et vos modèles de données. Vous pouvez utiliser des contrôleurs pour traiter les requêtes et renvoyer les données au format JSON. Cela facilite l’utilisation de votre API par d’autres applications.
Pour créer des API évolutives et faciles à maintenir, vous devez suivre ces bonnes pratiques :
- Structurez votre projet selon la Clean Architecture. Organisez votre code avec des contrôleurs, des services, des dépôts et des modèles ou DTO.
- Utilisez Async et Await pour les opérations d’E/S. Cela améliore les performances et permet à votre application de gérer davantage d’utilisateurs simultanément.
- Ajoutez une gestion globale des exceptions avec des middlewares. Cela vous aide à gérer les erreurs en un seul endroit.
- Activez le versionnement des API. Cela garantit la compatibilité de vos API avec différents clients.
- Utilisez la journalisation pour suivre les erreurs et les actions importantes.
Vous pouvez connecter vos API ASP.NET Core MVC à d’autres services, tels que gRPC ou des clients WPF. Cela vous permet de créer des solutions puissantes et interopérables sur toutes les plateformes.
Sécurité et authentification
Vous protégez votre application ASP.NET Core en utilisant ses fonctionnalités de sécurité intégrées. Le framework protège contre les menaces courantes telles que CSRF, XSS et l'injection SQL. Vous pouvez ajouter une authentification et une autorisation pour contrôler qui accède à vos API. De nombreux développeurs utilisent des jetons JWT pour sécuriser les points de terminaison et protéger les données sensibles.
Vous devez toujours maintenir votre application ASP.NET Core à jour. Les mises à jour régulières vous permettent de corriger les problèmes de sécurité et d'améliorer les performances. Vous pouvez également utiliser des middlewares pour gérer l'authentification et l'autorisation à l'échelle de l'ensemble de votre application.
Astuce : sécurisez vos API avec une authentification robuste et maintenez vos dépendances à jour. Cela vous aide à créer des applications web sûres et fiables.
Options de déploiement
Vous disposez de nombreuses façons de déployer vos applications ASP.NET Core MVC. Chaque option présente des avantages différents. Choisissez celle qui correspond aux besoins de votre projet et aux compétences de votre équipe.
1. Déploiement sur site
Vous pouvez déployer votre application sur vos propres serveurs. Cette méthode vous offre un contrôle total sur votre environnement. Vous installez IIS (Internet Information Services) sous Windows ou utilisez Kestrel avec un proxy inverse tel que Nginx ou Apache sous Linux. Vous gérez vous-même les mises à jour, la sécurité et la montée en charge.
Astuce : utilisez Kestrel pour des performances élevées. Associez-le à Nginx ou Apache pour gérer le HTTPS et l'équilibrage de charge.
2. Déploiement cloud
Vous pouvez déployer votre application dans le cloud. Les choix les plus populaires incluent Microsoft Azure, Amazon Web Services (AWS) et Google Cloud Platform (GCP). Les plateformes cloud offrent une mise à l'échelle facile, une haute disponibilité et des services managés.
| Plateforme cloud | Principales fonctionnalités | Exemple de service |
|---|---|---|
| Azure | Intégration poussée avec .NET, App Service, Functions | Azure App Service |
| AWS | Calcul flexible, portée mondiale | AWS Elastic Beanstalk |
| GCP | Prise en charge des conteneurs, machines virtuelles managées | Google App Engine |
Vous pouvez utiliser Azure App Service pour déployer votre application en quelques clics. Vous importez votre code, et Azure se charge du reste. Vous pouvez également utiliser Azure DevOps pour automatiser les déploiements.
3. Conteneurisation avec Docker
Vous pouvez empaqueter votre application dans un conteneur Docker. Cette méthode rend votre application portable et facile à déployer partout. Vous écrivez un Dockerfile simple pour définir l'environnement de votre application.
FROM mcr.microsoft.com/dotnet/aspnet:8.0
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]Vous générez et exécutez votre conteneur localement, puis vous le publiez dans un registre de conteneurs. Vous pouvez déployer les conteneurs sur Kubernetes ou sur des services cloud tels que Azure Kubernetes Service (AKS).
4. Intégration continue et déploiement continu (CI/CD)
Vous pouvez automatiser votre processus de déploiement grâce à des pipelines CI/CD. Des outils comme GitHub Actions, Azure DevOps et GitLab CI vous aident à générer, tester et déployer votre application automatiquement.
Remarque : le CI/CD réduit les erreurs et accélère votre cycle de publication. Vous pouvez annuler rapidement des modifications en cas de problème.
5. Hébergement multiplateforme
Vous pouvez héberger les applications ASP.NET Core MVC sous Windows, Linux ou macOS. Cette souplesse vous permet de choisir l'environnement le mieux adapté à vos besoins.
Tableau récapitulatif : options de déploiement
| Option | Niveau de contrôle | Évolutivité | Facilité de mise en place | Idéal pour |
|---|---|---|---|---|
| Sur site | Élevé | Manuelle | Modérée | Contrôle total, conformité |
| Cloud | Moyen | Automatique | Facile | Mise à l'échelle rapide, moins de configuration |
| Conteneurs | Élevé | Automatique | Modérée | Portabilité, microservices |
| CI/CD | Moyen | Automatique | Facile | Publications rapides, automatisation |
Vous devez examiner vos besoins avant de choisir une méthode de déploiement. Chaque option présente des atouts. Vous pouvez les combiner pour obtenir des résultats encore meilleurs. Par exemple, vous pouvez utiliser des conteneurs dans le cloud avec des pipelines CI/CD pour des déploiements rapides et fiables.
gRPC dans .NET
Qu'est-ce que gRPC
Vous utilisez gRPC pour créer une communication rapide et fiable entre vos applications. gRPC signifie Google Remote Procedure Call. Il s'agit d'un framework open source qui vous permet d'appeler depuis un client des méthodes sur un serveur comme si elles étaient locales. Vous pouvez utiliser gRPC pour les scénarios d'appel de procédure distante à hautes performances. Concrètement, vous envoyez et recevez des données rapidement, même lorsque vos applications s'exécutent sur des machines différentes.
gRPC utilise Protocol Buffers, un moyen de sérialiser les données indépendant du langage et de la plateforme. Vous définissez les contrats de vos services dans un fichier .proto. Ce fichier décrit les messages et les services que vous souhaitez utiliser. Vous générez le code de votre client et de votre serveur à partir de ce fichier. Vous pouvez utiliser gRPC dans de nombreux types d'applications, y compris les applications de bureau WPF, les applications web ASP.NET et les services cloud.
gRPC vs REST
Vous vous demandez peut-être comment gRPC se compare à REST. REST utilise HTTP et JSON pour échanger des données entre clients et serveurs. gRPC utilise HTTP/2 et Protocol Buffers. Cela offre de meilleures performances, car HTTP/2 prend en charge le multiplexage et le streaming. Les Protocol Buffers génèrent des messages plus légers que JSON, ce qui accélère la circulation de vos données.
Voici un tableau pour vous aider à comparer gRPC et REST :
| Fonctionnalité | REST (JSON) | gRPC (Protocol Buffers) |
|---|---|---|
| Format de données | JSON | Protocol Buffers |
| Transport | HTTP/1.1 | HTTP/2 |
| Performances | Bonnes | Meilleures performances |
| Streaming | Limité | Prise en charge complète |
| Contrat | OpenAPI/Swagger | Fichiers .proto |
Vous choisissez gRPC lorsque vous avez besoin de systèmes hautement évolutifs ou de communications en temps réel. Vous utilisez REST lorsque vous souhaitez des API simples, compatibles avec les navigateurs. De nombreux développeurs utilisent les deux dans une même solution.
Configurer les services gRPC
Vous configurez des services gRPC dans .NET en quelques étapes. Tout d'abord, vous créez un projet dans Visual Studio ou avec l'interface CLI de .NET. Vous sélectionnez le modèle « gRPC Service ». Ce modèle vous fournit un fichier .proto d'exemple ainsi que le code nécessaire pour démarrer votre service.
Vous définissez votre service et vos messages dans le fichier .proto. Par exemple :
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}Vous compilez votre projet. Les outils génèrent des classes C# pour votre client et votre serveur gRPC. Vous implémentez la logique de votre service en C#. Vous pouvez héberger des services gRPC dans ASP.NET Core, voire dans une application WPF pour des scénarios avancés.
Pour tester vos services gRPC, vous utilisez des outils tels que grpc-dotnet, Grpc.Net.Client et Grpc.AspNetCore.Server. Ces bibliothèques vous aident à créer, héberger et consommer des services gRPC dans .NET. Vous pouvez également utiliser FINT pour tester vos points de terminaison gRPC.
Vous connectez votre client WPF ou votre application ASP.NET à vos services gRPC en ajoutant le code client généré. Vos applications peuvent ainsi communiquer rapidement et en toute sécurité. Vous pouvez migrer des technologies plus anciennes, comme WCF, vers gRPC pour obtenir une solution moderne et évolutive.
Astuce : utilisez gRPC lorsque vous avez besoin d'une communication rapide, fiable et hautement évolutive entre vos applications .NET.
Consommer gRPC dans WPF et ASP.NET
Vous pouvez connecter vos applications WPF et ASP.NET Core à des services gRPC. Cela vous permet de partager des données et la logique métier entre applications de bureau et applications web. Vous bénéficiez d'une communication rapide et fiable, bien adaptée aux solutions modernes.
Intégration du client WPF
Vous pouvez ajouter gRPC à votre application de bureau WPF. Commencez par installer le package NuGet Grpc.Net.Client. Ce package vous fournit les outils nécessaires pour appeler des services gRPC depuis votre projet WPF.
Suivez ces étapes pour configurer un client gRPC dans WPF :
Ajouter le fichier .proto
Placez le fichier.protode votre service gRPC dans votre projet WPF. Définissez son action de génération sur « Protobuf » dans le fichier projet.Installer les packages NuGet
Ouvrez le Gestionnaire de packages NuGet. InstallezGrpc.Net.ClientetGoogle.Protobuf.Configurer le client gRPC
Créez un canal et un client dans votre code. Par exemple :using Grpc.Net.Client; using Greet; var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync(new HelloRequest { Name = "WPF User" }); MessageBox.Show(reply.Message);Gérer les threads
Utilisezasyncetawaitpour garder votre interface réactive. Ne bloquez pas le thread principal.
Astuce : vous pouvez partager des modèles de données entre vos projets WPF et ASP.NET Core à l'aide de bibliothèques partagées. Votre code reste ainsi propre et cohérent.
Intégration du client ASP.NET
Vous pouvez également utiliser des clients gRPC dans vos applications ASP.NET Core. C'est utile lorsque votre application web doit appeler d'autres services, comme des microservices ou des API backend.
Voici comment configurer un client gRPC dans ASP.NET Core :
Ajouter le fichier .proto
Incluez le fichier.protodans votre projet ASP.NET Core. Définissez son action de génération sur « Protobuf ».Installer les packages NuGet
AjoutezGrpc.Net.ClientFactoryetGoogle.Protobufvia NuGet.Enregistrer le client gRPC
Dans votre fichierStartup.csouProgram.cs, enregistrez le client avec l'injection de dépendances :builder.Services.AddGrpcClient<Greeter.GreeterClient>(o => { o.Address = new Uri("https://localhost:5001"); });Injecter et utiliser le client
Injectez le client dans votre contrôleur ou votre service :public class HomeController : Controller { private readonly Greeter.GreeterClient _greeterClient; public HomeController(Greeter.GreeterClient greeterClient) { _greeterClient = greeterClient; } public async Task<IActionResult> Index() { var reply = await _greeterClient.SayHelloAsync(new HelloRequest { Name = "Web User" }); ViewBag.Message = reply.Message; return View(); } }
Remarque : vous pouvez utiliser des clients gRPC dans des services d'arrière-plan, des contrôleurs ou toute autre partie de votre application ASP.NET Core.
Vous pouvez désormais connecter vos applications WPF et ASP.NET Core au même backend gRPC. Vous obtenez ainsi une solution unifiée et hautement performante pour vos besoins métier.
Walkthrough pratique d’intégration
Architecture de la solution
Vous pouvez créer une solution moderne en connectant WPF, ASP.NET Core MVC et gRPC. Cette architecture vous aide à offrir une expérience fluide entre le bureau et le web. Vous commencez par une application de bureau WPF. Vous ajoutez ASP.NET Core MVC pour votre interface web. Vous utilisez gRPC pour connecter les deux clients à vos services back-end.
Voici un schéma simple pour vous aider à comprendre la structure :
| Couche | Technologie | Rôle |
|---|---|---|
| Client de bureau | WPF | Interface utilisateur riche pour Windows |
| Client web | ASP.NET Core MVC | Interface utilisateur web pour navigateurs |
| Couche de communication | gRPC | Communication rapide et typée entre les couches |
| Services back-end | ASP.NET Core | Logique métier, accès aux données, API |
Vous pouvez utiliser cette configuration dans de nombreux scénarios. Par exemple, vous pouvez moderniser une application WPF existante en ajoutant ASP.NET Core MVC et gRPC. Vous pouvez aussi créer de nouvelles solutions qui nécessitent à la fois des clients de bureau et des clients web. Cette architecture convient bien aux microservices, car gRPC prend en charge des communications à haut débit.
Astuce : vous pouvez partager la logique métier entre WPF, ASP.NET Core MVC et ASP.NET Core en utilisant des bibliothèques partagées. Cela garde votre code propre et réduit les duplications.
Création d’un service gRPC dans ASP.NET Core
Vous pouvez créer un service gRPC simple dans ASP.NET Core. Ce service permettra à vos clients WPF et ASP.NET Core MVC de communiquer avec votre back-end. Commencez par ouvrir Visual Studio et créer un nouveau projet. Choisissez le modèle « gRPC Service ». Ce modèle vous fournit tout ce dont vous avez besoin pour démarrer.
Suivez ces étapes :
- Ouvrez Visual Studio et sélectionnez « Create a new project ».
- Choisissez « gRPC Service », puis cliquez sur Suivant.
- Nommez votre projet et sélectionnez ASP.NET Core 8.0 ou une version ultérieure.
- Cliquez sur Créer.
Vous verrez un service « Greeter » d’exemple dans votre projet. Ce service utilise un fichier .proto pour définir le contrat. Vous pouvez modifier ce fichier pour ajouter vos propres méthodes et messages.
Voici un exemple de fichier .proto :
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}Vous implémentez le service en C#. Le modèle vous fournit un fichier GreeterService.cs. Vous pouvez y ajouter votre logique.
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = $"Hello, {request.Name}"
});
}
}Vous exécutez votre projet ASP.NET Core. Le service gRPC écoute les requêtes de vos clients. Vous pouvez maintenant connecter vos applications WPF et ASP.NET Core MVC à ce service.
Remarque : gRPC utilise HTTP/2, veillez donc à ce que votre serveur le prenne en charge. Visual Studio s’en charge pour vous lorsque vous utilisez le modèle.
Consommer gRPC dans WPF
Vous pouvez connecter votre application WPF à votre service gRPC. Cela permet à votre application de bureau d’utiliser le même back-end que votre application web. Commencez par ajouter le fichier .proto à votre projet WPF. Définissez son action de génération sur « Protobuf ».
Suivez ces étapes pour configurer le client :
- Installez les packages NuGet Grpc.Net.Client et Google.Protobuf.
- Ajoutez le fichier .proto à votre projet.
- Créez un canal gRPC dans votre code.
Voici un exemple d’extrait de code :
using Grpc.Net.Client;
using Greet;
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = "WPF User" });
MessageBox.Show(reply.Message);Utilisez async et await pour garder votre application WPF réactive. Vous pouvez appeler les méthodes gRPC depuis vos view models ou vos services. Cette approche permet de partager les données et la logique entre vos clients WPF et ASP.NET Core MVC.
Astuce : vous pouvez réutiliser vos modèles de données en les plaçant dans une bibliothèque partagée. Cela facilite la synchronisation de vos projets WPF et ASP.NET Core MVC.
Vous disposez désormais d’une solution dans laquelle WPF et ASP.NET Core MVC utilisent tous deux gRPC pour communiquer avec votre back-end. Cette configuration vous apporte rapidité, fiabilité et une architecture moderne.
Contrats de données et Protobuf
Vous définissez les contrats de données dans gRPC à l’aide de Protocol Buffers, également appelé Protobuf. Protobuf vous permet de décrire la structure de vos messages dans un fichier .proto. Ce fichier sert de contrat entre votre client et votre serveur. Vous l’utilisez pour générer des classes C# que les deux parties comprennent.
Lorsque vous ajoutez un fichier .proto à votre projet .NET, vous devez le configurer correctement. Le tableau ci-dessous présente les principaux paramètres que vous utilisez :
| Configuration | Description |
|---|---|
Include <Protobuf> | Ajoute le fichier .proto à votre projet. |
Attribut GrpcServices | Contrôle les éléments C# générés : Both, Server, Client ou None. |
Gardez vos fichiers .proto simples et clairs. Utilisez des noms explicites pour vos messages et vos champs. Évitez les mots réservés et les caractères spéciaux. Ajoutez toujours des numéros de version dans les noms de vos messages ou de vos packages si vous prévoyez de faire évoluer vos contrats.
Voici quelques bonnes pratiques pour travailler avec Protobuf dans .NET :
- Placez vos fichiers
.protodans un dossier ou une bibliothèque partagés. Cela vous permet de garder vos contrats synchronisés entre WPF, ASP.NET Core et les autres projets. - Utilisez l’option
BothpourGrpcServicessi vous souhaitez générer à partir d’un même fichier.protole code client et le code serveur. - Gardez des types de données simples. Utilisez des types de base comme
string,int32ouboolpour la plupart des champs. - Ajoutez des commentaires à vos fichiers
.proto. Les commentaires aident les autres développeurs à comprendre vos contrats.
Astuce : lorsque vous modifiez un fichier
.proto, veillez à régénérer le code C# dans tous les projets qui l’utilisent. Cela garantit la synchronisation entre votre client et votre serveur.
Gestion des erreurs et journalisation
Une gestion robuste des erreurs et une journalisation efficace sont indispensables pour fiabiliser vos applications .NET. Lorsque vous utilisez WPF, ASP.NET Core et gRPC ensemble, vous devez suivre quelques stratégies clés :
- Mettez en place des gestionnaires d’exceptions globaux dans ASP.NET Core et WPF. Ils vous aident à détecter des erreurs qui, sans cela, pourraient passer inaperçues.
- Utilisez une journalisation centralisée. Elle facilite le suivi des problèmes et la maintenance de votre code.
- Dans ASP.NET Core, utilisez l’interface
IExceptionHandlerpour gérer les exceptions dans l’ensemble de votre application. - Dans WPF, créez un gestionnaire d’exceptions global pour intercepter les erreurs non gérées et les journaliser.
- Journalisez systématiquement les événements, erreurs et avertissements importants. Utilisez des outils comme Serilog, NLog ou les fournisseurs de journalisation intégrés.
- Veillez à ce que vos journaux contiennent suffisamment de détails pour identifier et corriger rapidement les problèmes.
Remarque : une bonne gestion des erreurs et une journalisation efficace vous permettent de repérer les problèmes au plus tôt. Elles facilitent également la maintenance et l’évolution de vos applications dans le temps.
Authentification et sécurité
Sécuriser les services gRPC
Vous devez sécuriser vos services gRPC pour protéger vos données et vos utilisateurs. Commencez par utiliser HTTPS pour l’ensemble des communications gRPC. Cette étape chiffre les données échangées entre le client et le serveur. Vous devez également mettre en place l’authentification et l’autorisation pour contrôler les accès. Lorsque vous configurez l’authentification et l’autorisation, vous définissez qui peut appeler vos méthodes gRPC et quelles actions ces appelants peuvent effectuer. Vous pouvez utiliser des certificats ou des jetons pour vérifier l’identité de chaque client. De nombreux développeurs utilisent à cet effet des jetons JWT. Validez toujours ces jetons côté serveur avant de traiter une requête.
Astuce : utilisez l’autorisation basée sur les rôles pour limiter l’accès aux méthodes gRPC sensibles. Attribuez des rôles aux utilisateurs et vérifiez leurs autorisations avant de les autoriser à effectuer une action.
Authentification dans WPF et ASP.NET
Vous devez implémenter l’authentification et l’autorisation dans vos applications WPF et ASP.NET. Dans ASP.NET, vous pouvez utiliser les intergiciels (middlewares) intégrés pour gérer l’authentification et l’autorisation. Ces intergiciels vérifient les identifiants des utilisateurs et appliquent les règles d’autorisation à chaque requête. Vous pouvez activer la fonctionnalité d’authentification et d’autorisation en configurant les services dans votre fichier Startup ou Program. Pour WPF, vous vous connectez souvent à un service back-end pour l’authentification et l’autorisation. Le client WPF envoie les identifiants de l’utilisateur au serveur, qui renvoie un jeton si ces identifiants sont valides. Le client utilise ensuite ce jeton pour les requêtes suivantes. Stockez toujours les jetons de manière sécurisée côté client.
Le tableau ci-dessous présente les méthodes courantes d’authentification et d’autorisation :
| Méthode | Description | Cas d’usage |
|---|---|---|
| Jetons JWT | Jetons compacts et sécurisés pour les sessions sans état | API web, services gRPC |
| OAuth2 | Autorisation déléguée pour l’accès de tiers | Intégrations externes |
| Authentification Windows | Utilise les identifiants Windows pour l’authentification | Entreprise interne |
Remarque : utilisez toujours un stockage sécurisé pour les jetons dans les applications WPF. Ne stockez jamais de données sensibles en clair.
Gestion des jetons
Vous devez gérer les jetons avec soin pour garder vos applications sécurisées. Lorsque vous utilisez l’authentification et l’autorisation, votre serveur émet un jeton après une connexion réussie. Le client stocke ce jeton et l’envoie avec chaque requête. Vous devez définir des durées de validité des jetons pour réduire le risque. Lorsqu’un jeton expire, le client doit en demander un nouveau. Dans ASP.NET, vous pouvez configurer la durée de vie des jetons et la logique de renouvellement. Pour gRPC, vérifiez toujours le jeton avant de traiter une requête. Si le jeton est absent ou invalide, refusez l’accès à l’aide de vos règles d’autorisation.
Vous devez aussi révoquer les jetons lorsqu’un utilisateur se déconnecte ou lorsque vous détectez une activité suspecte. Cette étape empêche tout accès non autorisé. Passez régulièrement en revue votre configuration d’authentification et d’autorisation pour vérifier qu’elle répond à vos besoins de sécurité.
Astuce : automatisez le renouvellement des jetons dans vos clients pour maintenir les sessions actives sans interrompre l’utilisateur.
Déploiement et maintenance
Déploiement multiniveau
Vous pouvez organiser votre solution .NET à l’aide d’un déploiement multiniveau. Cette approche découpe votre application en couches. Chaque couche a un rôle précis. Par exemple, vous pouvez disposer d’une couche de présentation pour WPF ou ASP.NET Core MVC, d’une couche de services pour la communication gRPC et d’une couche de données pour votre base de données. Cette structure facilite la gestion de votre code et la montée en charge de votre solution.
Une configuration multiniveau type se présente ainsi :
| Niveau | Exemple de technologie | Rôle |
|---|---|---|
| Couche de présentation | WPF, ASP.NET Core MVC | Interface utilisateur |
| Couche de services | gRPC, Web API | Logique métier, communication |
| Couche de données | SQL Server, PostgreSQL | Stockage des données |
Vous déployez chaque niveau sur des serveurs ou des conteneurs distincts. Cette séparation améliore la sécurité et les performances. Vous pouvez mettre à jour un niveau sans affecter les autres.
Astuce : utilisez gRPC dans votre couche de services pour relier rapidement et de manière fiable vos couches de présentation et de données.
Pipelines CI/CD
Vous pouvez automatiser la génération de votre application et le processus de déploiement grâce aux pipelines CI/CD. CI signifie Continuous Integration (intégration continue) et CD signifie Continuous Deployment (déploiement continu). Ces pipelines vous permettent de livrer des mises à jour plus rapidement et avec moins d’erreurs.
Voici les principales étapes d’un pipeline CI/CD :
- Vous envoyez votre code vers un système de gestion de versions comme GitHub ou Azure DevOps.
- Le pipeline génère l’application et exécute les tests.
- Si les tests réussissent, le pipeline déploie l’application dans un environnement de test ou de production.
Vous pouvez utiliser des outils comme GitHub Actions, Azure Pipelines ou GitLab CI. Ces outils prennent en charge les projets .NET, ASP.NET Core et gRPC. Vous pouvez configurer des déploiements automatiques pour vos services WPF, web et gRPC.
Remarque : les pipelines CI/CD vous aident à détecter les problèmes au plus tôt. Vous pouvez annuler les modifications en cas de problème.
Supervision et mises à jour
Vous devez superviser vos applications pour les maintenir en bon état. Les outils de supervision suivent les erreurs, les performances et l’utilisation. Vous pouvez utiliser Application Insights, Prometheus ou Grafana. Ces outils fonctionnent avec les services .NET, ASP.NET Core et gRPC.
Vous devez configurer des alertes pour les événements importants. Par exemple, vous pouvez être averti si votre service gRPC tombe en panne ou si votre application web ralentit. Les mises à jour régulières maintiennent votre système sécurisé et rapide. Appliquez les correctifs à vos serveurs, mettez à jour vos bibliothèques et consultez vos journaux régulièrement.
Une liste de contrôle simple pour la maintenance :
- Supervisez tous les services, y compris les points de terminaison gRPC.
- Configurez des alertes pour les erreurs et les ralentissements.
- Mettez à jour le runtime .NET et les bibliothèques.
- Consultez les journaux et corrigez rapidement les problèmes.
Astuce : planifiez des fenêtres de maintenance régulières. Cela vous permet d’appliquer les mises à jour sans perturber les utilisateurs.
Bonnes pratiques et prochaines étapes
Modèles de conception
Vous améliorez vos projets .NET en appliquant des modèles de conception éprouvés. Ces modèles vous aident à écrire un code facile à comprendre, à tester et à maintenir. Dans le développement .NET moderne, vous utilisez souvent des modèles comme l’injection de dépendances, Repository et MVVM (Model-View-ViewModel).
- L’injection de dépendances vous permet de gérer les dépendances entre les classes. Vous enregistrez les services dans votre code de démarrage et vous les injectez là où ils sont nécessaires. Ce modèle rend votre code flexible et testable.
- Le modèle Repository sépare la logique d’accès aux données de la logique métier. Vous créez des classes de dépôt pour gérer les opérations sur la base de données. Cela permet de garder votre code organisé.
- MVVM convient bien aux applications WPF. Vous séparez votre interface utilisateur, votre logique métier et vos modèles de données. Ce modèle vous aide à créer des applications de bureau réactives et faciles à maintenir.
Astuce : le podcast Modern .NET Development sur m365.fm montre souvent comment ces modèles vous aident à faire évoluer vos solutions et à anticiper les changements futurs.
Stratégies de test
Des stratégies de test solides sont indispensables pour livrer des logiciels fiables. Les tests vous permettent de détecter les bogues au plus tôt et de vérifier que votre code se comporte comme prévu. Dans .NET, vous utilisez différents types de tests :
| Type de test | Objectif | Outils |
|---|---|---|
| Tests unitaires | Tester de petits éléments de code de manière isolée | xUnit, NUnit, MSTest |
| Tests d’intégration | Tester la manière dont les composants collaborent | TestServer, WebApplicationFactory |
| Tests d’interface utilisateur | Tester les interfaces utilisateur et les parcours | Selenium, Playwright |
Écrivez des tests unitaires pour votre logique métier. Utilisez les tests d’intégration pour vérifier les interactions entre vos services et vos bases de données. Pour les applications WPF et web, ajoutez des tests d’interface utilisateur afin de garantir la fluidité de l’expérience utilisateur.
- Appliquez le développement piloté par les tests (TDD) pour écrire vos tests avant votre code.
- Automatisez vos tests dans vos pipelines CI/CD pour obtenir un retour rapide.
- Utilisez des mocks pour isoler vos tests et leurs dépendances.
Remarque : les tests automatisés vous font gagner du temps et réduisent les erreurs lors des mises à jour.
Documentation et collaboration
Vous gardez vos projets en bonne santé en rédigeant une documentation claire et en collaborant efficacement avec votre équipe. Une bonne documentation aide les nouveaux développeurs à comprendre votre code. Elle facilite également la maintenance et l’évolution de vos applications.
- Rédigez des fichiers README qui expliquent l’objectif de votre projet et les étapes d’installation.
- Utilisez des commentaires XML dans votre code pour décrire les classes et les méthodes.
- Créez une documentation d’API avec des outils comme Swagger pour ASP.NET Core.
Vous collaborez mieux lorsque vous utilisez un système de gestion de versions comme Git. Vous suivez les modifications, relisez le code et résolvez les conflits en équipe. Les compétences en communication comptent autant que les compétences techniques. Le podcast Modern .NET Development aborde souvent la manière dont une communication solide et une documentation claire aident les équipes à réussir, en particulier à mesure que les outils d’IA se généralisent dans le développement.
Astuce : planifiez des revues de code régulières et partagez vos connaissances avec votre équipe. Cette pratique conduit à un meilleur code et à une équipe plus solide.
Ressources d’apprentissage
Vous pouvez développer vos compétences en .NET grâce à un large éventail de ressources d’apprentissage. L’écosystème .NET évolue rapidement : vous devez donc suivre en permanence les derniers outils, frameworks et bonnes pratiques. Voici quelques ressources incontournables qui vous aideront à garder vos connaissances à jour et concrètes.
📚 Podcasts et émissions recommandés
Modern .NET Development Podcast (m365.fm)
Écoutez Mirko Peters et Gábor Ruzsinszki, MVP Microsoft, aborder des sujets .NET concrets. Vous bénéficiez de conseils d’experts sur WPF, ASP.NET Core, gRPC et bien d’autres sujets. Le podcast traite de l’IA dans le développement, des compétences en communication et des futures fonctionnalités de .NET.Astuce : abonnez-vous au podcast Modern .NET Development sur votre plateforme préférée pour recevoir les mises à jour régulières.
.NET Rocks!
Cette émission propose des entretiens avec des leaders du secteur. Vous découvrez les nouvelles tendances, outils et techniques en .NET.
📖 Documentation officielle et guides
Microsoft Learn pour .NET
Vous y trouverez des tutoriels pas à pas, des exemples de code et des leçons interactives. Microsoft Learn vous aide à maîtriser tous les sujets, de WPF à ASP.NET Core en passant par gRPC.Documentation ASP.NET Core
Vous y trouverez des guides détaillés sur la création d’applications web, d’API et de solutions sécurisées.Documentation gRPC pour .NET
Cette ressource explique comment configurer, utiliser et tester les services gRPC dans .NET.
🛠️ Communauté et plateformes interactives
Stack Overflow
Vous pouvez poser vos questions et obtenir des réponses de développeurs .NET expérimentés. Recherchez des solutions ou partagez vos propres connaissances.GitHub
Explorez des projets .NET open source. Vous pouvez lire du code, contribuer à des dépôts et apprendre à partir d’exemples concrets.Microsoft Q&A
Ce forum vous permet d’échanger avec des ingénieurs Microsoft et la communauté .NET.
📅 Conférences et événements en ligne
.NET Conf
Vous pouvez suivre des sessions et des ateliers en direct. Découvrez les dernières versions et fonctionnalités de .NET.Rencontres locales
Rejoignez les groupes d’utilisateurs .NET de votre région. Rencontrez d’autres développeurs, partagez vos expériences et travaillez ensemble sur des projets.
📝 Tableau : référence rapide des ressources d’apprentissage
| Type de ressource | Exemple/Lien | Ce que vous en retirez |
|---|---|---|
| Podcast | Modern .NET Development Podcast (m365.fm) | Analyses d’experts, témoignages concrets |
| Documentation | Microsoft Learn, documentation ASP.NET Core | Tutoriels, guides, exemples |
| Communauté | Stack Overflow, GitHub, Microsoft Q&A | Questions-réponses, code, réseautage |
| Événements | .NET Conf, Rencontres locales | Apprentissage en direct, réseautage |
Remarque : Réservez chaque semaine du temps pour explorer de nouvelles ressources. L’apprentissage continu vous aide à garder une longueur d’avance dans le développement moderne avec .NET.
Vous pouvez combiner ces ressources pour bâtir des bases solides. Testez de nouveaux outils, suivez les conseils d’experts et rejoignez la communauté .NET. Vous améliorerez vos compétences et garderez vos projets modernes et efficaces.
Vous avez découvert comment connecter WPF, ASP.NET et gRPC pour le développement moderne avec .NET. Vous avez vu des étapes concrètes de migration, d’intégration et de sécurisation. Vous pouvez utiliser gRPC pour créer une communication rapide entre applications de bureau et applications web. Vous améliorez vos projets en suivant les bonnes pratiques présentées dans l’épisode Modern .NET: WPF, ASP.NET Core, and gRPC with Gábor Ruzsinszki [MVP]. Essayez gRPC dans votre prochaine solution. Vous pouvez explorer m365.fm pour d’autres conseils d’experts.
Rejoignez la communauté .NET et expérimentez avec des projets d’exemple pour développer vos compétences.
Questions fréquentes
Quel est le principal avantage de WPF pour les applications de bureau ?
WPF vous permet de créer des interfaces utilisateur riches et réactives. Le framework prend en charge les graphiques avancés et la liaison de données. Vous concevez rapidement et efficacement des applications de bureau de niveau entreprise.
Comment ASP.NET Core améliore-t-il le développement web ?
ASP.NET Core vous offre une prise en charge multiplateforme et des performances élevées. Le framework vous permet de créer des applications web et des API sécurisées. Vous déployez vos solutions sur Windows, Linux ou macOS.
Pourquoi utiliser gRPC pour la communication entre services ?
gRPC vous assure une communication rapide et fiable entre les services. Le framework utilise HTTP/2 et Protocol Buffers. Vous réduisez la latence et améliorez l’évolutivité de vos applications.
Peut-on connecter WPF et ASP.NET Core à l’aide de gRPC ?
Vous intégrez WPF et ASP.NET Core grâce à gRPC. Le framework permet à vos applications de bureau et web de partager des données et une logique métier. Vous créez des solutions unifiées pour les besoins actuels des entreprises.
Quels outils facilitent la migration des applications .NET héritées ?
Vous utilisez l’Assistant de mise à niveau .NET et Visual Studio pour la migration. Ces outils analysent votre code et vous guident tout au long du processus de mise à niveau. Vous modernisez vos applications avec moins d’efforts.
Comment sécuriser vos services ASP.NET Core et gRPC ?
Vous protégez vos services en activant HTTPS et en utilisant des jetons d’authentification. Vous mettez en œuvre une autorisation basée sur les rôles pour contrôler l’accès. Vous assurez la sécurité de vos données et de vos utilisateurs.
Où trouver des conseils d’experts sur le développement moderne avec .NET ?
Écoutez le Modern .NET Development Podcast sur m365.fm. Le podcast présente des exemples concrets et des conseils pratiques. Vous apprenez auprès d’experts du secteur et restez informé des nouvelles technologies.
🎧 Écoutez cet épisode
Vous souhaitez une explication pratique de Modern .NET ? Cet épisode présente le sujet en termes clairs et montre pourquoi il compte pour Microsoft 365, Azure, Power Platform, la sécurité, l’IA et le travail moderne.
Écoutez cet épisode si vous souhaitez :
- Comprendre les concepts clés de Modern .NET
- Voir comment il s’intègre dans l’écosystème technologique plus large de Microsoft
- Découvrir où il peut apporter une valeur concrète à votre organisation
Vous apprécierez peut-être également ces épisodes M365 FM associés :
- LINQ to SQL ou EF Core pour l’accès aux données .NET
- Extensibilité .NET et architecture propre avec Miguel Castro [MVP] Note : le segment [[D]] est tronqué dans votre message (il se termine par « in your proje… »). Je ne peux pas le traduire sans le texte complet. Merci de me le renvoyer intégralement.
- Modern Microsoft 365 Automation Beyond PowerShell Scripts
- Build AI Applications with .NET 10
- Improve Entity Framework Core Query Performance
Découvrez d’autres échanges pratiques sur Microsoft sur M365 FM.