2010-12-12 7 views
5

Wir haben einen .net-Dienst mit einfachen Befehlen (Wiedergabe, Pause, nächster Titel zum Beispiel). Dies wird auf den Arbeitsstationen des Benutzers mit seinen eigenen Anmeldeinformationen (z. B. FooServiceUser) installiert. Wenn ich den Benutzern eine App zur Verfügung stellen möchte, die die Befehle an den Dienst senden kann, was wäre der einfachste Weg dazu? Denken Sie daran, dass ich nur Befehle von einer einzelnen Arbeitsstation an einen Prozess senden möchte, der auf derselben Arbeitsstation ausgeführt wird. Die Befehle sind sehr einfach. Außerdem muss die App den Status vom Dienst erhalten. dh pausiert, Spur 21 spielend.Was ist der einfachste Weg, zwei .net-Apps miteinander zu sprechen?

Sollte einfach sein, oder? WCF sieht kompliziert und übertrieben aus. Jeder auf SO sagt, .net Remoting ist schlecht. Ich möchte MSMQ nicht installieren. Jede Erwähnung von Sockets wird negativ bewertet.

+1

Welches "Gewicht" möchten Sie "leicht" halten? Größe der Bereitstellungsnutzlast? LOC? Lernkurve? – AakashM

+0

Licht bedeutet, leicht zu lernen, zu verstehen und wenig in die Irre zu führen. Ich übertrage von C++ win32. Also das Äquivalenz von Named Pipes ist, was ich gesucht habe. Stattdessen sehe ich ganze Bücher, die wertvoller sind, Tonnen von Informationen über Technologien, die ich wahrscheinlich nicht brauche. –

+0

Entschuldigung, ich wollte auch hinzufügen, wenig Speicherbedarf. –

Antwort

6

Für eine komplette, einfach zu bedienende Lösung würde ich WCF empfehlen. Es unterstützt nur ein Speicherkanalprotokoll (ICP) für diese Anwendung.

Bleibt das, was man als "leicht" bezeichnen würde. Der Hosting-Teil von WCF kann in etwa 5 Codezeilen ausgeführt werden. Der gesamte clientseitige Code wird generiert. Kümmern Sie sich wirklich um die Anzahl und Größe der zu verwendenden Assemblies (bereits installiert) oder um die Anzahl der Features, die Sie ignorieren werden?

Verwenden Sie einfach WCF.
Und es wird Ihnen ermöglichen, einfach zu Sockets und Inter-PC zu skalieren, wenn die Notwendigkeit jemals auftritt.

+2

WCF ist im Allgemeinen sehr einfach zu implementieren. – jle

+4

"Das Hosting-Teil von WCF kann in etwa 5 Zeilen Code erreicht werden", die nicht leicht übersetzt. – Aliostad

+0

@aliosta, vielleicht, aber was ist das? –

6

Ich würde es absolut gesagt Remoting wird abgelöst und WCF verwenden, um mit Named Pipe Bindung aber jetzt, dass Sie Leichtgewichtigkeit sprechen, muss ich sagen, Remoting ist leicht und ist nicht überall zwischen zwei AppDomains, da die Kommunikation geht in der Regel von Remoting . So ist es in der Tat eine gültige Wahl.

gesagt haben, dass unter Berücksichtigung der Flexibilität von WCF, würde ich noch empfehlen - obwohl es schwer, klobig und verkocht.

+1

Ich würde sagen Remoting wurde in WCF assimiliert (Borg-Stil), befürworten Sie wirklich die Verwendung einer veralteten Technologie? Was genau wären die "leichten" Vorteile? –

+0

IpcChannel ist der benannte Pipe-Kanal für Remoting –

+1

Abstraktionen in WCF eingebaut sind viel zu schwer und verkocht.Sein Kanalstapel ist mit so viel Zeug gefüllt. Einige nennen WCF reich, ich nenne es übertrieben. – Aliostad

2

Wenn sich die App auf demselben Computer wie der Windows-Dienst befindet, müssen Sie sich wahrscheinlich nicht um Remoting, Webdienste usw. kümmern, da Sie die ServiceController Class instanziieren und die ExecuteCommand-Methode verwenden können.

+0

Interessant, ich wusste nicht, dass Sie das tun könnten ... Es scheint jedoch ziemlich begrenzt (keine Möglichkeit, Argumente an einen Befehl zu übergeben, begrenzte Anzahl von Befehlen ...) –

+0

Wie funktioniert das? eine Sicherheitsstufe? Allen Benutzern sollte erlaubt sein, "Play" oder "Pause" zu senden, aber nicht den Dienst zu stoppen oder zu starten oder andere Dienste zu beeinflussen. –

+0

Vereinbart, dass das Fehlen von Parametern und die Anzahl der Befehle in einigen Situationen überwältigende Einschränkungen sind, aber es passt gut in andere. Windows Services werden von Zugriffskontrolllisten verwaltet, die auch Dateien und Verzeichnisse sichern. Die Benutzer müssen über Start- und Stoppberechtigungen verfügen, um den Dienst starten und stoppen zu können. Sie möchten jedoch eine Befehlsnummer senden, die Start, Stopp, Pause usw. darstellt. Die Berechtigung Benutzerdefinierte Kontrolle wird wahrscheinlich erforderlich sein Sende ihm einen Befehl. – N0Alias

1

WCF ist leicht in Bezug darauf, wie viele Zeilen Code ich brauche, um meine Kommunikation zu erledigen. Es ist nicht sehr leicht in Bezug auf die Ausführungsgeschwindigkeit und Speicherverbrauch. WCF ist sehr einfach zu bedienen. Aber seine erweiterbare Architektur macht es manchmal etwas schwierig, die richtige Klasse zu finden.

Plain-Socket-Betrieb ist nicht leicht in Bezug auf den Programmieraufwand, aber leicht in Bezug auf Laufzeitbetrieb. Sie haben absolute Kontrolle über jedes Bit, wenn Kanäle geöffnet oder geschlossen werden und so.