2013-01-09 8 views
6

Ich erstelle eine Client-Anwendung, die Marktdaten von Yahoo! herunterlädt und anzeigt. für ein Universitätsprojekt, aber das sendet auch Benachrichtigungen an Handys (bisher mit Google Cloud Messaging). Bisher ist es ein WPF-Client und der "Server" ist eine Klassenbibliothek - soweit funktioniert. Was ich mich gefragt habe, ist, können Sie diesen Server mit einem WCF-Dienst mischen - dem WCF-Dienst, den ich für das Registrieren von Geräten verwenden wollte, sowie das Akzeptieren und Parsen von Befehlen.C# traditioneller Server mit WCF Web Service

So würde ich .Start() auf meinem Server-Objekt aufrufen, und es wird ständig im Hintergrund ausgeführt werden, während ein WCF REST-Dienst daneben läuft - oder wäre ich besser einfach mit einem Thread auf dem Server ausgeführt wird, die Eingabe akzeptieren kann ... tut mir leid, wenn das verwirrend ist, aber ich frage mich nur, ob es möglich ist, oder ob es vorher getan wurde oder irgendein Ratschlag. :)

Nur ein bisschen besser

Der Client Frontend und der „Server“ läuft auf der gleichen Maschine zu erklären - ich habe es ein Server anrief, weil es nicht nur das vordere Ende der Aktualisierung, aber das Senden GCM-Benachrichtigungen gleichzeitig aus. Ich fragte mich, ob vielleicht ein WCF-Dienst hinzugefügt werden könnte, um das Hinzufügen von Geräten zu einer Datenbank einfacher zu machen ("Server" liest eine Liste von Geräte-IDs aus einer Datenbank, sendet Benachrichtigungen an diese), indem er einer Android-App Details zulässt REST oder etwas Ähnliches

+0

Sie können ganz klar jede Art von Dienstleistungen/Bibliotheken mischen ... Ist Ihr Ziel, Kommunikation zwischen Prozessen über REST-Service oder etwas anderes zu haben? Es ist unklar, was genau komplexer sein muss als eine einfache WPF-Anwendung. –

Antwort

3

ich erforschen würde die Klassenbibliothek in einem Windows-Dienst Einwickeln (der im Wesentlichen ein Prozess ist, der kontinuierlich läuft, und gestoppt werden kann/gestartet/pausiert) und halten Sie Ihren WCF-Dienst als Web-Service für die Client-Kommunikation.

Wie der WCF-Clientdienst mit dem Windows-Dienst kommuniziert, bleibt Ihnen überlassen - ob Sie die Daten in einer gemeinsamen Datenbank speichern, im Speicher behalten und eine andere WCF-Schicht zwischen den beiden kommunizieren usw. Eine gemeinsame Datenbank wäre am einfachsten, vor allem, wenn Sie die Daten auch für andere Apps/Dienste verwenden möchten.

+0

Yeah die Art, wie es jetzt strukturiert habe ich WPF-App, ausgewählt "Start Server" und der Server wird von der MainWindowViewModel gestartet. Wenn der Server ein Update erhält, löst er ein Ereignis aus, das die Daten von der Klassenbibliothek an das ViewModel sendet, das es verarbeitet, die Anzeige aktualisiert usw. Keine Daten werden wirklich gespeichert, außer Benutzereinstellungen und Konfiguration in einer Datenbank - Die Daten werden in einem Wörterbuch in der Klasse lib gespeichert. und gespeichert im Speicher, am Ende seine entsorgt – KingTravisG

+1

Basierend darauf, können Sie einfach am besten serialisieren das Wörterbuch auf die Festplatte, wenn Sie die WPF-App schließen und neu laden, wenn Sie es starten. Dies würde Ihr unmittelbares Problem lösen. Für ein Produktionssystem würde ich den WCF-Dienst in einem Windows-Dienst (oder einem WCF-Dienst in einer asp.net-Anwendung zum Hosten in IIS) erstellen und dann Ihre WPF-App so ändern, dass sie die WCF-Dienstmethoden genauso verwendet wie die Android-Geräte würde. – Nate

0

WCF-Dienst wäre nützlich, wenn Sie einen Benachrichtigungsdienst auf Ihrem Server mit mehreren WPF-Client-Anwendung, die Verbindung zu ihm hatte. Wenn nur eine Anwendung auf demselben Server ausgeführt wird, ist nicht sicher, ob sich der Aufwand lohnt.

Das übliche Muster besteht darin, WCF-Dienst in IIS zu hosten, so dass es immer startet, wenn die erste Anforderung empfangen wird. WCF ist zwar sehr flexibel, daher können Sie in in Windows-Dienst hosten, Konsole-Anwendung usw.

Verwandte Themen