4

J'ai un site Web écrit en C# (MVC) et un service Windows écrit en C#. Les deux fonctionnant sur la même machine. L'idée est pour eux de partager la même base de données.Communication entre le site Web et le service Windows

Le service Windows agit en tant que moteur et le site Web est davantage un frontal présentant les résultats des calculs effectués par le moteur. La communication consiste en des commandes avec peu de données du serveur Web au service Windows. Très peu de commandes/seconde est à prévoir.

Quel serait un bon moyen pour eux de communiquer?

+0

Quel type de communication? Combien de transactions/messages? Quantité de données? – sll

+1

Un site Web et un service Web partageant la même base de données ne sont-ils pas inutiles? Pourquoi consommer le service lorsque vous pouvez accéder directement aux données? –

Répondre

0

Tout dépend de ce que vous voulez faire. Il existe un certain nombre d'options disponibles: vous pouvez héberger un service web (reposant ou non) dans Windows Service, vous pouvez utiliser Remoting ou WCF, etc.

Mais tout commence par une question: pourquoi en avez-vous besoin? ? Qu'est-ce qui vous empêche de déplacer la fonctionnalité du service Windows dans l'application Web?

+4

En général, on peut utiliser un service Windows où des calculs de longue durée ont lieu, ou quand il y a un travail à faire qui n'est pas directement lié à l'entrée de l'utilisateur sur le site web. –

2

Généralement, le plus rapide du côté Windows sera LRPC. Selon vos besoins, la WCF peut être un réel problème. Nous utilisons des protobuffers Win32 LRPC + pour obtenir un débit 40 fois plus rapide du serveur Web vers le service d'arrière-plan. Cela dépend de vos besoins.

(voir Benchmarking WCF compared to Protocol Buffers + RpcLibrary)

Le protobuf-csharp-port a le plus de ce que vous avez besoin pour définir le service et les messages. Ensuite, en utilisant protobuf-csharp-rpc pour fournir la sérialisation du message sur un Win32 LRPC transport layer. Une fois que vous avez dépassé la définition du protocole dans les protobuffers, c'est vraiment facile. Il suffit de quelques lignes de code sur le client/serveur pour créer la classe de connexion et de proxy.

Encore une fois, tout dépend de ce que vous cherchez; Cependant, à mon humble avis, il n'y a pas actuellement une meilleure architecture RPC pour le .NET Framework. Je suis, bien sûr, partiale à mon avis, mais nous utilisons des variantes depuis 2003 et cela fonctionne. PS: Si vous construisez le service à partir de zéro, vous pouvez consulter mon guide au Building a Windows Service Project Template. Il vous permettra de démarrer assez rapidement avec real la journalisation des événements, l'installation et les tests de ligne de commande.

0

Vous pouvez toujours le faire «dans l'autre sens»: faites en sorte que votre site Web exécute un port d'écoute Web et que le service Windows s'y connecte.

Questions connexes