2010-02-11 7 views
7

Wir arbeiten an einer Peer-to-Peer-Kommunikationssoftware, die es einer Reihe von Lebensmittelgeschäften ermöglicht, ihr Inventar mit dem zu synchronisieren, was wir "Hauptquartier" nennen. Dazu denken wir an WCF + WPF und keine IIS- und Webdienste. Meine Erfahrung mit WCF ist im Grunde Null, also meine Frage ist, ob eine TCP-Comm-Lösung mit WCF funktionieren würde. Die Daten, die übertragen werden, sind sehr begrenzt, etwa 2 MB für eine komprimierte Nur-Text-Datei (also senden wir Binärdaten!), Und dies geschieht nur einmal pro Tag. Daher sollte die Bandbreite/Auslastung hier kein Problem sein. Die Idee an diesem Punkt ist es, einen WCF "Server" im HQ laufen zu lassen. Stores machen sich auf diesem Server bekannt und senden dann Dateien hin und her (ähnlich einer Chat-Anwendung). Worüber ich mir nicht sicher bin: Muss jeder Shop einen WCF "Server" (oder Endpunkt) haben? Wie würde der Server (= HQ) eine Datei an einen der Clients senden (= speichern)? Jeder Laden kann eine Datei an einen anderen Laden senden, und der HQ und jeder Laden kann auch eine Datei von jedem anderen Laden/HQ "anfordern".WCF-Kommunikation mit mehreren Clients ohne IIS

Zwei Einschränkungen: Keine der beteiligten Computer/Rechner kann Windows-Server aus Budgetgründen ausführen, und wie bereits erwähnt, ist IIS ein No-Go.

Antwort

2

Wenn Sie all Ihren Datenverkehr über den Server leiten, gibt es keinen Grund, warum Sie dies nicht mit WCF erreichen könnten. Der Server würde WCF-Dienste in IIS hosten, wobei die Stores über einen Client verfügen, der Dateien hochladen und anfordern kann. Mit dieser Methode können Geschäfte nicht direkt miteinander übertragen, aber sie müssten dies über den Hauptserver tun, was Ihren Bedürfnissen entspricht, wenn Sie nicht das Budget für das andere Szenario haben.

Wenn alle Übertragungen einmal pro Tag durchgeführt werden, werden die Anforderungen für Dateien mit jedem Client gestellt, der die benötigten Dateien anfordert, gefolgt von jedem Client, der alle Dateien hochlädt, die vom Server oder einem anderen Client benötigt werden.Der letzte Schritt wäre, dass der Server die erforderlichen Dateien an jeden Client verteilt. Offensichtlich ist dies eine vereinfachte Ansicht davon, der tatsächliche Prozess kann etwas mehr Nachdenken erfordern.

+0

Ja, genau das denke ich auch an dieser Stelle. Haben Sie einen Server, der den gesamten Datenverkehr abwickelt ... der Server muss jedoch in der Lage sein, Dateien an die Clients zu senden, ohne dass sie diese anfordern müssen. Der WCF-Server muss also irgendwie wissen, ob der Client online/verbunden ist. Ist das möglich? Danke! – John

+0

Wenn der Server keine Verbindung zum Client herstellen kann, können Sie mit der spezifischen Ausnahme umgehen, die ausgelöst wird, und sie zu einem späteren Zeitpunkt erneut versuchen. Sie müssen eine Art Timer für den Prozess auf Ihrem Server haben. – Tanner

2

Sie müssen WCF nicht in IIS hosten, aber gibt es einen bestimmten Grund, warum Sie das nicht möchten?

Sie können WCF Host in einem Servicehost, aber dann müssen Sie bauen, warten und viele Server/Service-Funktionen bereitstellen, die IIS kostenlos bereitstellt, wie Bewerbungsverfahren Recycling, Aktivierung-basierte Hosting etc.

In jedem Fall klingt es fast so, als ob Sie Peer-to-Peer-Netzwerke benötigen. Sie können dies mit WCF unter Verwendung der NetPeerTcpBinding tun.

+0

Vielen Dank für Ihre Antwort. Das bedeutet also, dass jeder Client auch einen "Server" (Endpunkt) benötigt, z. Ein WCF in einem Windows-Dienst gehostet? Ich hatte gehofft, dass nur eine Maschine den WCF-Dienst hosten würde, und alle anderen Clients können mit jedem anderen Client kommunizieren. Ja, IIS würde sich als nützlich erweisen. Lahme Entschuldigung: Der Kunde mag es einfach nicht. – John

+0

Sie können einen Server verwenden und eine so genannte Duplex-Bindung verwenden. Dies bedeutet, dass der Client für die Dauer der Sitzung einen Endpunkt beim Dienst registriert. In einer solchen Hub-and-Spoke-Topologie können Clients jedoch nur direkt mit dem zentralen Server und nicht miteinander kommunizieren. –

+0

Ermöglicht NetPeerTCPBinding einem Client, etwas an einen bestimmten anderen Client zu senden, oder gibt es keine Kontrolle darüber, wer die Nachricht erhält? Wie ich es verstehe, ist dies eine Übertragung, so dass alle Clients die Nachricht erhalten. Nochmals vielen Dank für Ihre Zeit. – John

0

Wenn Sie die Möglichkeit haben, Ihre Anwendung neu zu gestalten, empfehle ich Ihnen, dies zu tun. Sie können Strings in WCF umherwerfen, aber wenn Sie einen Datenvertrag erstellen können, können Sie Ihre gesamte Kommunikation stark typisiert halten.

Wenn Sie Zugriff auf Windows Server 2008 haben, kann der neue IIS Ihren WCF auch dann hosten, wenn er nicht TCP verwendet. Andernfalls müssen Sie nur eine Anwendung schreiben, die einen Service-Host öffnet, den Sie normalerweise in einen Windows-Service einbinden würden. Aber wie @ MArk Seemann darauf hingewiesen hat, erhalten Sie viele Werbegeschenke, indem Sie Ihren Dienst in IIS ausführen.

Haben Sie keine Erfahrung mit der PeerTcpBinding, aber ich kann Ihnen sagen, dass die NetTcpBinding ist schön und schnell und es kommt mit allen Arten von Goodies wie Verschlüsselung und Authentifizierung, wenn Sie es wollen.

+0

Danke. Ich stimme dem IIS zu. Sie wollen/können sich Win2008 nicht leisten, aber das meiste, was sie tun können, ist Windows 7 + IIS. Welche Vorteile bietet IIS bei der Verwendung von TCP, die ein Windows-Dienst nicht bietet? Wie gesagt, die Ladung ist sehr niedrig und kein Problem. Und es gibt eine Garantie, dass nur ein Client zu einer Zeit "spricht", d. H. Eine Datei sendet. Danke noch einmal! – John

+0

Sie sind grundsätzlich verantwortlich für die Erstellung, Überwachung von Hosting usw. Ihres Dienstes in WCF, sowie dafür, dass es die richtige Konfiguration hat und Sie keine Tool-Unterstützung erhalten. IIS wird nur eine DLL mit einem Service darin hosten, hat ein Werkzeug, um den Service zu konfigurieren, löst Ereignisse usw. aus, wenn der Service online ist und startet ihn automatisch neu, wenn er abstürzt usw. Sie müssen dies selbst tun, wenn Sie dies nicht tun benutze es. – Spence

3

Wenn Sie nur Dateien hin und her senden, könnte ich in Frage stellen, ob WCF überhaupt Sinn macht. Haben Sie darüber nachgedacht, einfach ein Dateiübertragungsprotokoll wie scp oder sftp zu verwenden?

Jede Maschine muss Verbindungen akzeptieren und eine Dateiablage-Einrichtung einrichten, und dann muss Ihre Anwendung diesen Speicherort für neue Dateien überwachen. Ich liebe WCF im Allgemeinen, aber ein Dateiübertragungsprotokoll wird ein Bein hoch haben, wenn das alles ist, was Sie tun möchten.

+0

Ich stimme zu. Aus meiner Sicht konzentriert sich WCF mehr auf den Nachrichtenaustausch als auf den Austausch von Dateien. –

Verwandte Themen