2009-03-15 8 views
9

Ich kenne die Unterscheidung zwischen UDDI und Ws-Discovery (gut bekannt Ort, um einen Dienst vs Broadcast zu suchen). Aber meine Frage ist: Was ist der einfachste Weg, einen Webservice in WCF zu entdecken? Mit einfachsten meine ich, was ist bereits in WCF implementiert und kann jetzt verwendet werden? Ich habe keine integrierte Implementierung in WCF für UDDI oder Ws-Discovery gesehen.Web-Service-Discovery in WCF: Ws-Discovery oder UDDI?

Haben Sie einen Link oder Erfahrung, um über diese beiden Protokolle in WCF zu teilen?

UPDATE

Jetzt denke ich über drei Lösungen, auf .NET 4.0 für WS-Discovery warten, oder vielleicht meine eigene Entdeckung zu schaffen mit dem Peer-Bindung durch WCF bereitgestellt to-Peer-Bindung. Auf diese Weise kann ich eine Anfrage senden. Oder verwenden Sie die Implementierung über den Link von eed3si9n.

Ich denke, dass ich eine Gateway-Schnittstelle tun werde, um die Implementierung letzter zu ändern.

+1

Ich habe noch nicht festgestellt, Web-Service-Discovery von irgendeinem Wert sein. Das könnte bedeuten, dass ich noch nie ein Szenario gesehen habe, in dem es nützlich wäre. Ich wäre interessiert, wenn Sie Ihr Szenario teilen könnten - Sie haben vielleicht ein gutes Szenario gefunden. –

+0

Hallo John, ich habe mehrere Terminals, die mit einem Dienst "sprechen". Aber ich will keine Referenz in der Konfigurationsdatei meiner Anwendungen in den Terminals zu einem bestimmten Endpunkt + Bindung, weil dies zu einem Albtraum bei der Wartung führt, wenn ich eine Bindung oder meinen Server ändere. –

+0

"Wartung Albtraum"? Wir sprechen hier über die Aktualisierung von "n" XML-Dateien! Ich würde das kaum einen Albtraum nennen. –

Antwort

3

.NET 4.0 wird WS-Discovery haben. Siehe Messaging enhancements in .NET 4.0: (Discovery Part I)Using WS-Discovery in WCF 4.0. In der Zwischenzeit hat Claudio Masieri eine Implementierung zur Verfügung gestellt. Siehe WS-Discovery for WCF.

Es gibt auch eine benutzerdefinierte Discovery-Implementierung in ähnlicher Weise wie UDDI getan. Siehe Windows Communication Service Discovery.

Stellen Sie sich vor, Sie haben 200 Kunden mit Ihren funky Wcf-Service.Sie würden alle haben in ihrer conf-Datei einen Abschnitt wie diese ein:

<client> 
    <endpoint configurationName="default" 
       address="http://localhost/servicemodelsamples/service.svc" 
       binding="wsHttpBinding" 
       bindingConfiguration="Binding1" 
       contract="IDataContractCalculator" /> 
</client> 
<bindings> 
    <wsHttpBinding> 
     <binding configurationName="Binding1" /> 
    </wsHttpBinding> 
</bindings> 

Jetzt entscheiden Sie, die vorhandene Endpunkt (Server-Seite) zu ändern, um mit einem neuen , die SSL verwendet für Sicherheitsgrund. Wie aktualisieren Sie Ihre Kunden? Sie können schnell sehen, dass es langweilig werden kann. So ist die Idee, die ich hier zum Detail wollen, ist eine Entdeckung Service ähnlich wie das umzusetzen, was UDDI tut und einen Metadaten-Resolver zu verwenden, um die Konfiguration aus dem Dienst in zu schaffen, um dynamisch einen Proxy ermöglicht den Client zu erhalten, besprechen Sie mit den Service.

Diese Person hat ähnliche Bedenken wie Sie und scheint eine funktionierende Lösung zu haben.

2

UDDI bietet eine zentrale Registrierungs speichern Informationen über verfügbare Dienstleistungen. Es liefert einen Katalog, wo Verbraucher Dienste finden können, die ihre Bedürfnisse erfüllen. Dieses Telefonbuch-ähnliche Verzeichnis von Informationen ermöglichen Verbraucher, um Dienste mit Namen, Adresse, Vertrag, Kategorie oder durch andere Daten zu finden. UDDI kann man sich als DNS von Webdiensten vorstellen.

Auf der anderen Seite, WS-Discovery- bietet ein Protokoll Dienstleistungen zu entdecken, und von einem Netz gehen kommen. Wenn ein Dienst das Netzwerk verbindet, informiert es seine Peers von seine Ankunft durch Senden einer Hello Nachricht; Ebenso, wenn Dienste aus dem Netzwerk fallen lassen, senden sie eine Bye Nachricht per Multicast. WS-Discovery verlässt sich nicht auf ein einzelner Knoten, um Information über alle verfügbaren Dienste zu hosten, wie UDDI tut. Stattdessen gibt jeder Knoten Informationen über verfügbare Dienste in einer Ad-hoc-Weise weiter. Dies reduziert die Menge der Netzwerkinfrastruktur benötigt, um Dienste zu entdecken und erleichtert Bootstrapping.

Zitat aus: http://travisspencer.com/blog/2007/09/post.html

Hier ist eine gute Liste der Eigenschaften: http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!728.entry

+0

Ich weiß das schon, aber wissen Sie, dass es in WCF einfacher ist, WS-Disco oder UDDI zu verwenden? Haben Sie irgendwelche Links oder Erfahrungen mit diesen Protokollen auf WCF? –

+0

Leider nein. Ich habe nur begrenzte UDDI-Erfahrungen. Ich habe einen ausführlichen Artikel über Codeproject gefunden, aber ich denke, dass Sie es auch gegründet haben. (http://www.codeproject.com/KB/WCF/uddiservicefactory.aspx) – boj

+0

Ich werde versuchen, es zu verwenden, ich denke, WS-Disco ist besser für meinen Anwendungsfall (ich versuche zu vermeiden, eine "zentrale" zu haben Server), aber UDDI ist besser als nichts (dh 239023802 Xml-Konfiguration zu konfigurieren!). Vielen Dank –

0

jUDDI hat einen .NET-Client, den Sie verwenden können. Es vereinfacht eine Menge Dinge beim Arbeiten mit UDDI.

Aus Erfahrung gibt es nur zwei oder drei funktionierende Implementierungen von WS-Discovery.

UDDI Sie kann von allem zugreifen. Es gibt viele Client- und Serverimplementierungen. (Nur die Version 3 Zeug ist hier aufgelistet)

  • IBM WS-Registry
  • Apache jUDDI
  • Microsoft UDDI v3 mit Biztalk (seinem freien mit 2008-Server)
  • HP SOA/Systinet oder was auch immer es ist genannt jetzt
  • WSO2 hat etwas
  • ebXML hat eine Art Brücke oder Adapter

Es gibt sogar einen REST-Endpunkt für UDDI3 (jUDDI 3.2 hat es, XML- oder JSON-Antworten), was dies für viele weitere Möglichkeiten öffnet.

Darüber hinaus sind die mit WS-Discovery gemeinsam nutzbaren Daten im Vergleich zu den praktisch unbegrenzten Daten, die Sie an UDDI anhängen können, etwas eingeschränkt.

Das sind nur meine 2 Cent.