Zum Inhalt springen

WCF - Verbindung über Internet


Blackodem

Empfohlene Beiträge

Hallo Informatiker Kollegen,

ich schreibe momentan eine WPF Anwendung die an einen WCF Service gekoppelt ist. Der WCF Service wird in einer Konsolenanwendung gehostet. Soweit alles gut, funktioniert auch auf dem Rechner (Server und Client auf dem selben Rechner). Ich möchte den Server nun aber Testweise auf meinen Webserver auslagern und den Client mit dem WCF auf dem Webserver verbinden. Ich benutze HTTP und habe den Endpoint vom WCF auf folgende URL angepasst http://0.0.0.0:8090/ERPTracker_Service/ClientService, damit ich ihn von außen erreichen kann. Funktioniert im localhost immer noch klasse. Wenn ich den Service jetzt allerdings auf dem Webserver schmeiße und versuche mich mittels Domain oder IP mit dem Service zu verbinden, funktioniert das nicht. Der Port ist freigegeben und wenn ich in der Browserzeile "http://IPVOMSERVER:8090/ERPTracker_Service/ClientService" eingebe, bekomme ich sogar eine Infoseite vom Service, kann sich da jemand erklären warum das mit dem Client nicht funktioniert? der Endpoint vom Client ist natürlich auch angepasst.

Ich freu mich auf Antworten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, danke schon mal für die Antwort

Der Port ist auf dem Server freigegeben und ein Programmierfehler ist definitiv möglich, da das mein erster Gehversuch mit WCF ist, aber Versuch macht kluch :D

Kann ich dir denn noch irgendwelche Informationen liefern? Was brauchst du? Ich hänge hier einmal den Code vom WCF an, ich habe ihn direkt programmseitig konfiguriert und nicht über die App.Config. Fehlt da vielleicht noch ein Endpoint zum Metadaten-Austausch? Wie gesagt auf dem lokalen System funktioniert es.


static void Main(string[] args)

    {

      // Url erstellen (HTTP)

      Uri lUrl = new Uri("http://0.0.0.0:8090/ERPTracker_Service/ClientService");


      // ServiceHost erstellen

      ServiceHost lServiceHost = new ServiceHost(typeof(service.clientservice.ClientService), lUrl);


      // ServiceEndpoint hinzufügen (HTTP)

      WSHttpBinding lBinding = new WSHttpBinding();

      lServiceHost.AddServiceEndpoint(typeof(service.clientservice.IClientService), lBinding, "");


      //Enable metadata exchange

      ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

      smb.HttpGetEnabled = true;

      lServiceHost.Description.Behaviors.Add(smb);


      lServiceHost.Open();


      Console.WriteLine("Service is host at " + DateTime.Now.ToString());

      Console.WriteLine("Host is running... Press <Enter> key to stop");

      Console.ReadLine();

    }

Link zu diesem Kommentar
Auf anderen Seiten teilen

Stimmt, da hab ich das close vergessen das würde unten noch dran kommen.

Ne ich hab in der WPF eine ServiceReference erstellt und bau mir aber in nem Loginfenster den Endpunkt selbst zusammen, also je nachdem was der User für eine IP und einen Port eingibt, ich weiß ist bestimmt nicht die gelbe vom Ei, aber ich hab mich mit dem Proxy generieren sehr schwer getan und bin dann auf die ServiceReference umgestiegen.

Wie gesagt, WCF war bis jetzt immer ein Buch mit sieben Siegeln für mich, bitte nachsichtig sein

Bearbeitet von Blackodem
Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Loginfenster lass ich den User eine IP und einen Port eingeben und bau mir dann den Endpunkt zusammen


ClientService.ClientServiceClient lClient = new ClientService.ClientServiceClient();

lClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://" + AppInfo.ServerIP + ":" + AppInfo.ServerPort + "/ERPTracker_Service/ClientService");

Ich hatte sonst anstelle von 0.0.0.0 auch localhost, bzw. die Domain/IP meines Webservers, aber ich habe gelesen das 0.0.0.0 bedeutet das er dann auf alles hört was kommt und, da es nicht funktioniert hat, habe ich dann diese Adresse ausprobiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke, dann sollte ich das das wirklich mal ändern, aber welche Adresse würde man denn angeben, damit der WCF auf alle Adressen horcht, sodass man das nicht immer für jeden Server anpassen muss? Und wenn ich anstatt 0.0.0.0 die Ip des Servers angegeben habe, hat es auch nicht funktioniert, da muss ja dann noch irgendwas im Busch sein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Frage in Deiner Applikation ab, welche IP-Adresse eth0 hat und setze diese dann beim Aufbau des Server-Socket.

So lange Du nicht mit einem brauchbaren Quelltext die Anfrage stellst, wird Dir auch niemand weiter helfen können/wollen.

Man macht aus einem Forum einfach kein Quizz!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist eine gute Idee danke.

Was soll ich denn noch dazu packen, es ist der Code vom Service da und der Code vom Client, was wird noch gebraucht?

Server:


static void Main(string[] args)

    {

      // Url erstellen (HTTP)

      Uri lUrl = new Uri("http://localhost:8090/ERPTracker_Service/ClientService");


      // ServiceHost erstellen

      ServiceHost lServiceHost = new ServiceHost(typeof(service.clientservice.ClientService), lUrl);


      // ServiceEndpoint hinzufügen (HTTP)

      WSHttpBinding lBinding = new WSHttpBinding();

      lServiceHost.AddServiceEndpoint(typeof(service.clientservice.IClientService), lBinding, "");


      //Enable metadata exchange

      ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

      smb.HttpGetEnabled = true;

      lServiceHost.Description.Behaviors.Add(smb);


      lServiceHost.Open();


      Console.WriteLine("Service is host at " + DateTime.Now.ToString());

      Console.WriteLine("Host is running... Press <Enter> key to stop");

      Console.ReadLine();

    }

Client:

ClientService.ClientServiceClient lClient = new ClientService.ClientServiceClient();

      lClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://" + AppInfo.ServerIP + ":" + AppInfo.ServerPort + "/ERPTracker_Service/ClientService");

bool lbVerbindung = lClient.TestConnection();

Bearbeitet von Blackodem
Link zu diesem Kommentar
Auf anderen Seiten teilen

Damit man lokalisieren kann, wo es klemmt, würde ich empfehlen alles zu posten, was mit der Sache zu tun hat.

Aber das mit dem Ermitteln der Server-IP finde ich persönlich nicht so gut.

Es gibt Serversysteme, die a. mehrere NIC's besitzen, b. Dienste sollen nur auf bestimmten Interfaces zur Verfügung gestellt werden, etc.

Erstelle besser eine Konfgurationsdatei für den Dienst, in dem Du alle notwendigen Parameter setzt.

Zusatz:

Helfen kann auch, wenn man den Quelltext akribisch dokumentiert!

Bearbeitet von uenetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Zum Ersten würde ich bei der Konfiguration erstmal zurück auf BasicHttpBinding gehen. Bisher sehe ich ich der Konfiguration keine Grund, welcher WSHttpBinding rechtfertigt. Zweitens, kannst Du die komplette Url des WCF-Service posten? Kann auch eine für Testzwecke angelegte Webseite auf dem IIS sein.

Bearbeitet von lbm1305AtWork
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...