Entwickler-Ecke

Verteilte Systeme - WCF zwischen zwei Rechnern funktioniert leider nicht


JDKDelphi - Mo 19.08.13 15:41
Titel: WCF zwischen zwei Rechnern funktioniert leider nicht
Hallo liebes Forum,

ich hab' mal wieder ein kleines Problem:

Ich möchte zwei eigenständige Rechner mit einem WCF-Service verbinden und zwar direkt mit einem Netzwerkkabel.


Der Grund:

Die Rechner sollen sich im Schaltschrank "unterhalten", d.h. Statusmeldungen austauschen.
Ich brauche das, um zwei gleiche Bildverarbeitungsprogramme(14 Kameras) zu verbinden, die nur mit einer SPS kommunizieren.


Auf einem Rechner läuft die Kommunikation zwischen zwei Programmen problemlos, jedoch nicht zwischen zwei Rechnern.

In den einschlägigen Tutorials wird immer nur "...LocalHost:Portnummer.." benutzt, ich jedoch wollte entweder
per "net.tcp://Rechnername:Port/Dienstname" kommunizieren oder per IP-Beispiel "net.tcp://192.168.127.50:8000/FirstService"

Vielleicht hat jemand einen Tipp, wie man so etwas realisiert.


Ich hänge mal eine Zip-File dran, wo Server und Client als Sourcecode auf dem "net.tcp://Localhost:8000" funktioniert.
Auch mit IP "net.tcp://192.168.127.50:8000/FirstService" ging es..
Das Ganze wurde mit C#2010 Express erstellt. Der Sourcecode ist auch nicht auf meinem "Mist" gewachsen, sondern im Internet gefunden und leicht von mir verändert worden.

Ich kann das ganze peer2peer mit 2 Laptops(XP) testen.


Besten Dank im voraus für Eure Mühe.
Vielleicht geht's ja ganz einfach...


Gruß

JDKDELPHI


Tilo - Di 20.08.13 12:16

Hallo JDKDelphi,

Ein paar Fragen zur Problemeingrenzung:
Wie sind die beiden Rechner verbunden?
Wenn sie direkt miteinander verbunden sind benötigst Dur ein "CrossOver"Kabel.

Sind auf beiden Rechner die Ports freigeschalten? (ein und ausgehend!)

Können die Rechner überhaupt aufeinander zugreifen?
Ein einfacher Test: auf beiden Rechner je einen Netzwerkordner freigeben und über diese Daten austauschen.

Da ich aktuell den Quellcode nicht angucken kann, war es dann auch erstmal.

Beste Grüße,
Tilo


Th69 - Di 20.08.13 12:57

Hallo Tilo,

bei heutigen Rechnern (d.h. mit 1GBit (1000BASE-T) Ethernet-Controllern) benötigt man kein CrossOver-Kabel mehr. Ich wurde vor kurzem von einem Kollegen darüber aufgeschlaut, s.a. Why do we not need a crossover cable if one computer has a Gigabit ethernet card? [http://superuser.com/questions/523093/why-do-we-not-need-a-crossover-cable-if-one-computer-has-a-gigabit-ethernet-card] ;-)


Ralf Jansen - Di 20.08.13 13:01

Zitat:
scf = new ChannelFactory<Contract.IServiceContract>(ntb, "net.tcp://localhost/Testservice:8000");


Der Port gehört zum Rechnernamen nicht zum Pfad.

Ich gehe mal davon aus das deine Firewall läuft und standardmäßig die 8000 nicht (wenn du den denn auch verwenden würdest im Moment geht das vermutlich über 808) durchlässt. Du solltest auch keinen Port nehmen der schon offiziell vergeben ist.