WCF pour les applications en mode local et réseau - plus question sur le profil client .NET
-
06-07-2019 - |
Question
Je suis en train de construire une application WinForms sur laquelle je devrai travailler "localement". (tout comme Microsoft Word, enregistrer et ouvrir des fichiers à partir du système de fichiers) et également dans un environnement multi-utilisateur (communication avec un serveur du réseau, via TCP / IP).
En termes d'architecture, je pense à ces couches logiques:
- Présentation (formulaires Windows)
- Service
- Accès aux données
Mon plan est de créer le "service". superposer un service WCF. Ainsi, lorsque l'application fonctionne dans " local " mode, j'hébergerais le service WCF dans le processus de présentation (exécutable). La présentation serait un hôte de service ET un client en même temps. Il accèderait à la couche de service à l’aide d’un proxy WCF, en indiquant "localhost".
Lorsque l'application est dans un environnement réseau, j'aimerais héberger le même service WCF dans un "Service Windows / NT". processus sur une autre machine et Presentation communiquerait avec elle en utilisant le même proxy WCF qu'en mode local.
C’est-à-dire que pour Presentation, j’aurais une seule API.
En théorie, cela a l'air bien. Cependant, j'aimerais connaître votre opinion sur toute cette affaire. Est-ce une mauvaise pratique d’utiliser WCF de cette manière, en ayant serveur et client dans le même processus? Voyez-vous une autre façon / meilleure de le faire?
Une autre question (peut-être non liée) est la suivante: puis-je héberger et utiliser un service WCF dans le même exécutable Windows Forms si je tagète l'installation du profil client .NET Framework?
J'apprécie vos commentaires:)
La solution
Je dirais que ce n’est pas mal du tout d’héberger serveur et client dans le même processus - c’est ce que l’on appelle la communication inter-processus! : -)
Pour le scénario local, j'utiliserais la liaison NetNamedPipe, aussi rapide que possible, pour "sur machine". communication uniquement.
Pour le scénario réseau local, passez simplement à NetTcpBinding - très rapide et efficace également.
Devrait fonctionner comme un charme.
Selon cette page sur le profil du client .NET Framework , pratiquement tout le contenu de WCF doit être pris en charge sur le profil du client:
Fonctionnalités WCF supportées par le .Net Profil client cadre
La communication Windows suivante Les fonctionnalités de la fondation sont supportées par Profil client .NET Framework:
* All of WCF is supported except for Cardspace and web hosting. * Remoting TCP/IP channels are supported. * Asmx (Web Services) are not supported.
Marc