RSS FeedFeed TwitterTwitter XINGXING
  
Meine Bücher

Erscheint demnächst: Verteilte Systeme und Services mit .NET 4.5: Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API ,
Hanser Fachbuchverlag

Weitere Infos

 

.NET 4.5 Update,
Microsoft Press

Weitere Infos

 

Verteilte Systeme und Services mit .NET 4.0: Konzepte und Lösungen mit WCF 4.0,
Hanser Fachbuchverlag

Weitere Infos

 
Weitere Bücher
Meine Artikel

Leichtgewichtige Kommunikation: REST-basierte Services mit dem neuen API aus der ASP.NET-Familie,
windows.developer

Weitere Infos

 

Windows Azure Tutorial, Teil 3: Verbindung zwischen Cloud- und lokalen Applikationen,
iX - Magazin für professionelle Informationstechnik

Weitere Infos

 

Weitere Artikel

Schulung & Beratung

Gemeinsam mit meinen Kollegen aus dem IT-Visions Netzwerk unterstützte ich durch zielgerichtete Inhouse-Trainings und Consulting Unternehmen bei der Planung und Umsetzung großer Software-Systeme mit der Microsoft/.NET-Plattform.

 
Konferenzen

Scandinavian Developer Conference 2013 (SDC 2013) von 04.03.2013 bis 06.03.2013 in Göteborg

Meine Talks

Web-Site der Konferenz

 

BASTA! on Tour Spring 2013 von 24.04.2013 bis 26.04.2013 in Düsseldorf

Meine Talks

Web-Site der Konferenz

 

5th SOA and Cloud-Technology Symposium 2012 von 24.09.2012 bis 25.09.2012 in London

Meine Talks

Web-Site der Konferenz

 
Weitere Konferenzen
von Manfred, 15. Oktober 2011 00:00
Für Fälle, in denen TCP zu viel Overhead mit sich bringt, bietet WCF 4.5 nun ein udpBinding an. Wie der Namen vemuten lässt, stützt es sich auf das verbindungslose Protokoll UDP und erlaubt somit eine, in Relation zu TCP gesehen, schlanke Form der Kommunikation - ohne Three-Way-Handshake und Bestätigungsnachrichten. Dies bedeutet aber auch, dass es der Sender nicht bemerkt, wenn Nachrichten verloren gehen. Insofern macht dieses Binding nur in Fällen sinn, wo das egal ist oder gar gewünscht ist, weil die Daten zum Beispiel nach einem erneuten Senden bereits veraltet wären.
 
Außerdem erlaubt UDP das Versenden von Multicasts. Damit sind Nachrichten gemeint, die von beliebig vielen Interessenten im lokalen Netzwerk empfangen werden können. Dazu verwendet man sowohl für den Service- also auch für den Client-Endpunkt eine IP-Adresse aus dem Bereich 224.x.x.x bis 239.x.x.x. Jene, die die Zeit der IPv4-Klassen miterlebt haben, werden diesen Adress-Bereich auch als Klasse D bezeichnen oder anders ausgedrückt: Alle Adressen dieses Bereichs haben ein binäres Muster, welches mit 1110 beginnt. Bei der Vergabe von Multicast-Adressen muss man sich jedoch vor Augen führen, dass die Adressen 224.x.x.x und 239.x.x.x für spezielle Zwecke reserviert sind, sodass sich dieser Wertebereich für die freie Verwendung auf 225.x.x.x bis 238.x.x.x beschränkt. Darüber hinaus soll an dieser Stelle nochmals ausdrücklich erwähnt werden, dass UDP-Nachrichten nicht über Netzwerkgrenzen geroutet werden und somit nur innerhalb eines Netzwerks herangezogen werden können.
 
Das nachfolgende Beispiel zeigt die Implementierung eines UDP-Multicasts. Es verwendet die Multicast-Adresse 225.1.1.1:9999. Somit können beliebig viele Instanzen des Service gestartet werden, wobei jeder Server alle vom Client gesendeten Nachrichten erhält, sofern diese nicht verloren gehen. Antworten mehrere Services auf eine Anfrage des Clients, zieht dieser lediglich die zuerst erhaltene heran; alle anderen werden ignoriert. Eine Möglichkeit, dies zu Umgehen, stellt der Einsatz von Callbacks (Duplex) dar. Allerdings unterstützt das udpBinding in der aktuellen Developer Preview (noch?) keine Duplex-Szenarien, weswegen diese manuell implementiert werden müssten.

Service-Konfiguration
<system.serviceModel>

 <services>
 <service name="UdpSample.FlugService">

 <endpoint address="FlugService" binding="udpBinding" contract="UdpSample.IFlugService"/>

 <host>
 <baseAddresses>
 <add baseAddress="soap.udp://225.1.1.1:9999/"/>
 </baseAddresses>
 </host>

 </service>
 </services>

 <behaviors>
 <serviceBehaviors>
 <behavior>
 <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/>
 <serviceDebug includeExceptionDetailInFaults="true"/>
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>

Client-Konfiguration
<system.serviceModel>

 <client>
 <endpoint address="soap.udp://225.1.1.1:9999/FlugService"
 binding="udpBinding"
 contract="UdpSample.IFlugService"
 name="FlugService" />
 </client>

</system.serviceModel>

Kategorien: WCF