So prüfen Sie die Verfügbarkeit des Netzes.tcp WCF-Dienst
Mein WCF-server braucht, um zu gehen auf und ab auf einer regelmäßigen basis, der client manchmal verwendet den server, aber wenn es unten ist, den client einfach ignorieren.
Also jedes mal muss ich die server-Dienste, die ich überprüfen Sie den Zustand der Verbindung und wenn es nicht öffnen, ich öffne es.
Das problem ist, dass wenn ich versuche zu öffnen, während der server down ist, gibt es eine Verzögerung, und das trifft Leistung.
Meine Frage ist, gibt es eine Möglichkeit zu tun, eine Art von myClient.CanOpen()
? also möchte ich wissen, ob es eine Punkt-zu-öffnen der Verbindung zum server.
InformationsquelleAutor der Frage Pablo Retyk | 2009-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Implementierung von WS-Discovery, die erlauben würde, Sie zu hören, für die auf/ab-Ansagen für Ihren service. Dies ist auch eine sehr bequeme form der service-Adresse, die Auflösung, weil es verwendet UDP-multicast-Nachrichten zu finden, die service -, sondern als Konfiguration ein-Satz-Adresse auf dem client.
WS-Discovery für WCF
Gibt es auch eine Umsetzung erfolgt von einem Microsoft-Mitarbeiter:
WS-Discovery-Beispiel für die Implementierung
.NET 4.0 wird nativ. Sie können darüber Lesen .NET 4.0-Implementierung auf Jesus Rodriguez ' s blog. Es hat eine tolle Grafik, die details, die der ad-hoc-Kommunikation, die auf geht in der WS-Disco Durch die Verwendung von WS-Discovery in WCF 4.0
Andere Sache, die Sie betrachten, vor allem, wenn Ihre Nachrichten sind weitgehend one-way, ist ein Protokoll, das funktioniert nativ getrennt, wie MSMQ. Ich weiß nicht, was Ihr design für Ihre Anwendung aussieht, aber MSMQ würde damit ein client eine Nachricht zu senden, unabhängig vom Status des Dienstes und der Dienst werde es, wenn es zurück kommt. Auf diese Weise werden Ihre Kunden nicht haben, um block ganz so viel versucht, um die Bestätigung, dass ein service ist, bevor die Kommunikation... es werden nur Feuer-und-vergessen.
Hoffe, das hilft.
InformationsquelleAutor der Antwort Anderson Imes
Wenn Sie dabei sind, ein synchroner Aufruf erwartet einen server-timeout-in einer Anwendung mit einer Benutzeroberfläche, die Sie tun sollten, es in einem anderen thread. Ich bezweifle, dass die performance-Einbußen aufgrund einer Ausnahme overhead.
Ist Ihr performance-Einbußen CPU-Last, gui, Verfügbarkeit oder Wand Uhr Zeit?
Könnten Sie untersuchen, um zu sehen, wenn Sie können erstellen Sie eine benutzerdefinierte Bindung auf dem TCP -, aber mit schneller timeout.
Ich nehme an, Sie wissen, dass "IsOneWay=true" ist schneller als die Anfrage->Antwort in Ihrem Fall, da würden Sie nicht eine Antwort zu erwarten sowieso, aber dann sind Sie nicht immer eine Bestätigung oder Rückgabewerte.
Sie könnten auch die Umsetzung einer zwei-Wege-Kommunikation, das nicht Anfrage->response.
InformationsquelleAutor der Antwort Tormod
Wenn Sie in einem lokalen Netzwerk, es könnte möglich sein, senden ein signal zu sagen, dass ein neuer server ist. Der client würde hören müssen, für die broadcast-signal und entsprechend reagieren.
InformationsquelleAutor der Antwort Jon
Hier ist, was ich verwenden und es funktioniert wie ein Charme. Und btw, der ServiceController-Klasse lebt in namespace 'System.ServiceProcess'.
InformationsquelleAutor der Antwort Dave_B
Ich glaube nicht, dass es möglich ist dabei ein server-Seite aufrufen, um Ihre Kunden zu informieren, dass Sie der service gestartet wurde ... Beste Methode, die ich sehen kann, ist eine client-Methode, herauszufinden, wo oder nicht der service ist offen und in gutem Zustand. Es sei denn, ich bin fehlen einige Funktionen der WCF ...
Es ist ein guter Beitrag WCF: die Verfügbarkeit der WCF services wenn Sie daran interessiert sind, gelesen zu werden.
InformationsquelleAutor der Antwort Konstantinos