2010-03-18 2 views
7

Je suis en train de concevoir un logiciel qui doit faire fonctionner différents composants matériels principalement en fonction d'un planning, mais également d'une interface web pour configurer les paramètres, configurer le planning et éventuellement contrôler manuellement le matériel. Je ne suis pas sûr de savoir comment concevoir l'architecture d'un logiciel comme celui-ci. Une pensée que j'ai eue était de créer un service Windows qui fait la communication avec le matériel ainsi que les services Web de "publication" via WCF et ayant ensuite une application ASP.NET qui contrôle ensuite le service Windows via WCF. Cette approche semble représenter beaucoup de travail pour ce que j'essaie d'accomplir.Comment créer un .NET (C#) pour un programme qui doit fonctionner en tant que service Windows, mais qui possède également une interface Web?

Est-ce que quelqu'un pourrait me donner une indication s'il s'agit d'une bonne approche, et même si je peux le faire, s'il vous plaît?

Merci! Joel

+0

Pour des raisons de sécurité, la meilleure solution dépendra beaucoup de votre configuration matérielle. Comment la machine accepte-t-elle les demandes? Où votre site Web résidera-t-il par rapport à votre service Windows? Quels pare-feu sont impliqués? Pouvez-vous à la place exécuter un service Windows qui interroge un service Web et dispose également d'une interface utilisateur? – pdr

+0

La machine accepte principalement les demandes via un ou plusieurs ports série (réseaux RS485). Le site Web pourrait être sur la même machine que le service, mais j'aime la possibilité de les séparer si nécessaire. Le pare-feu ne sera probablement pas un problème dans ce cas car tout sera sur le même réseau. Pouvez-vous expliquer ce que vous entendez par "service Windows qui interroge un service Web et dispose également d'une interface utilisateur?" Je ne sais pas comment un service Windows pourrait avoir une interface utilisateur. – hjoelr

+0

Si vous souhaitez héberger l'interface Web sur une machine différente, il n'y a pas d'alternative à votre pensée. – SLaks

Répondre

1

Vous pouvez instancier un point de terminaison WCF en tant que service TCP à partir du service Windows, comme expliqué sur MSDN: How to: Host WCF in a Windows Service Using TCP. À partir de là, il est relativement simple de consommer ce point de terminaison dans une application ASP.NET (identique à la consommation de tout autre point de terminaison WCF). En l'absence de raisons impérieuses de faire autrement, c'est probablement l'approche que je prendrais. Votre seule autre option consiste à utiliser une autre forme d'IPC, telle que des fichiers mappés en mémoire ou des canaux nommés. La WCF est beaucoup plus facile à démarrer.

+0

C'est la solution que je devais. Cependant, je n'ai pas parlé de l'intégration du serveur Web ASP.Net dans un service. Si cela m'oblige à utiliser encore la WCF pour la communication, alors cela peut encore être la voie à suivre. – hjoelr

+0

Ma question de suivi à propos de WCF est: Serait-ce assez rapide pour être un intermédiaire entre l'interface web et le matériel?Je ne pense pas que je puisse attendre plusieurs secondes pour les réponses de la WCF. – hjoelr

+1

@hjoelr: WCF est très rapide, même lorsque le cryptage et les autres extensions sont activés. Je suis habitué à des temps de réponse de l'ordre de 1/4 de seconde des serveurs distants; normalement le seul retard est dû à la latence du réseau, et si vous avez tous les services fonctionnant sur la même machine ou au moins sur le même réseau alors la latence devrait être presque nulle. – Aaronaught

0

Vous pouvez simplement utiliser un fichier XML commun (ou quelque chose) que le service surveille pour les changements. L'interface Web pourrait simplement lire/écrire ce fichier XML. Cela ne fonctionne que si le service et le site web tournent sur la même machine (vous pouvez aussi le faire via un partage, mais c'est une configuration supplémentaire et vous pourriez bien aller avec WCF dans ce cas).

+0

Bonne pensée. Cependant, il doit y avoir une communication à double sens. Le site Web interroge les informations du service, mais le site Web doit également être en mesure de mettre à jour les paramètres et autres dans le service. – hjoelr

0

Vous pouvez intégrer un serveur Web ASP.Net dans le service à l'aide de l'API d'hébergement ASP.Net, puis l'utiliser pour exécuter un site Web ASP.Net directement.

Notez que le site ASP.Net s'exécuterait dans un AppDomain distinct.

+0

Vous devez cependant développer le site ASP.NET séparément. Cela n'exclut pas vraiment la nécessité de trouver un moyen de communication entre l'application ASP.NET et le service, il vous permet simplement d'exécuter l'ensemble du paquet sans IIS. – Aaronaught

+0

@Aaronaught: Vous pouvez simplement passer un 'MarshalByRefObject' qui expose le service à' ApplicationHost.CreateApplicationHost' et interagir avec lui dans ASP.Net. (Le projet ASP.Net doit référencer l'assembly de service) – SLaks

+0

Ceci est un concept intéressant. Je ne savais pas que c'était même possible. Je vais voir si je peux voir cela pour voir si cela fonctionnerait pour ma situation. – hjoelr

Questions connexes