Verwirrung über WCF-Kanäle

8

Ich bin verwirrt über den Proxy und die Kanäle. Laut meiner Lektüre verwendet der WCF-Client einen Proxy, der die Nachricht über eine Kette von Kanälen weiterleitet. Jeder Kanal ist für bestimmte Aufgaben verantwortlich, zum Beispiel verschlüsselt ein Kanal die Nachricht und ein anderer Kanal verschlüsselt sie.

Meine Verwirrung beginnt, als ich den folgenden Code sah

  • Wenn proxy.MyMethod() aufgerufen wird, hat es tatsächlich die gesamte Kette von Kanälen aufgerufen?

  • Der Autor hat die Methode CreateChannel verwendet und den Bezeichner proxy benannt. Also in WCF-Architektur Proxy ist nur ein Raum High-Level-Kanal, es ist kein eigenständiges Architekturelement?

    %Vor%
Costa 04.03.2013, 12:02
quelle

3 Antworten

3

Ja, ich denke, Sie haben das genau beschrieben. WCF hat dieses Konzept der "Kanäle", welche Entwickler dazu neigen, in der web.config zu konfigurieren und schreibe keinen C # -Code herum.

Diese sind in der Channel Model Overview beschrieben.

Wenn Sie ChannelFactory.CreateChannel(binding,address); aufrufen, betrachtet das Framework Ihre Konfiguration und erstellt all diese Kanäle für dich als ein Objekt. Also ja, der Proxy ist wie ein Stapel von Kanälen.

Von Ihrem Ende an interagieren Sie mit ihm als ein Objekt. Das Framework befasst sich mit der Implementierung von getrennten Kanälen. Es ist immer noch schön zu verstehen, dass du diese Schichten durchläufst Sie können sie richtig konfigurieren.

    
Buh Buh 04.03.2013, 12:19
quelle
10

In WCF haben Sie 3 Hauptkomponenten - Vertrag, Adresse und Bindung. Der Kanal ist ein Rohr, das nach diesen drei Teilen baut.

Das Ziel des Kanals besteht darin, die Nachricht in ein Format zu ändern, das sowohl für den Client als auch für den Server verstanden wird und den ordnungsgemäßen Transport organisiert. Hierfür werden die Transport- und Protokollkanäle verwendet. Um diesen Prozess zu vereinfachen, verwenden wir Bindungen. Jede Bindung besteht aus Elementen, die einen Kanal im Kanalstapel darstellen.

Jedes Mal, wenn Sie Ihre Methode aufrufen, bildet sie die Nachricht entsprechend Ihrem DataContract und übergibt sie an die gesamte Kette der Kanäle. Jeder Kanal ändert Ihre Nachricht. Das sieht so aus.

Ein WCF-Proxy ist eigentlich nur eine Abstraktionsebene. Es ist ein In-Process-Vertreter eines Out-of-Process-Service. Sie können es sich als ein Objekt vorstellen, das entsprechend Ihren Bindungselementen und Ihrem dataContract generiert und richtig konfiguriert wurde, wodurch sich Ihre Client- und Server-Seite gegenseitig verstehen können.

    
Alex 13.03.2013 12:56
quelle
0

In diesem Fall ist "Proxy" eine Referenz auf das Software-Designmuster. Aus Wikipedia :

  

Ein Proxy in seiner allgemeinsten Form ist eine Klasse, die als   Schnittstelle zu etwas anderem. Der Proxy könnte mit allem interagieren: a   Netzwerkverbindung, ein großes Objekt im Speicher, eine Datei oder eine andere   Ressource, die teuer oder unmöglich zu duplizieren ist.

Im Falle von WCF erstellt ChannelFactory & lt; & gt; .CreateChannel einen Channel-Stack basierend auf der Konfiguration. Jeder Kanal bietet eine Abstraktion für den darunter liegenden Kanal. Zum Beispiel könnte ein vereinfachter Channel-Stack sein:

  • Kanal 1 serialisiert das .NET-Objekt in eine SOAP-Nachricht
  • channel 2 Fügt der Nachricht Sicherheitsinformationen hinzu
  • Kanal 3 codiert die Nachricht, die über TCP gesendet werden soll.

Ich denke, du verstehst das alles.

Zurück zur Verwendung von "proxy": Jeder Kanal im Stapel ist ein Proxy für den Kanal darunter. Das heißt, kein Kanal ist das endgültige Ziel. Alle Kanäle sind "eine Schnittstelle zu etwas anderem". Wenn Sie jedoch den Kanalstapel nach unten bewegen, stellen die verschiedenen Kanäle dem Aufrufer eine andere Schnittstelle / Abstraktion (.NET-Objekt, SOAP-Nachricht usw.) zur Verfügung.

Wieder soll diese Diskussion die Frage beantworten und absichtlich vereinfacht werden.

Wenn Sie Client-Code schreiben, ist die Schnittstelle, die am nützlichsten ist, diejenige, die .NET-Objekte versteht. Wenn Sie dies wissen, gibt die ChannelFactory den Kanal zurück, der an der Spitze des Stacks liegt und eine .NET-Schnittstelle hat, die Ihrem Servicevertrag entspricht. Es wäre sinnvoll, eine SOAP-Nachricht als String zu erstellen, den Channel-Stack zu durchlaufen (oder einen benutzerdefinierten Stack zu erstellen), den Kanal zu finden, der eine rohe SOAP-Nachricht akzeptiert, diesen als "Proxy" zu bezeichnen und direkt aufzurufen.

  

Der Autor hat die Methode CreateChannel verwendet und den Bezeichner benannt   Proxy. In der WCF-Architektur ist Proxy also nur eine besondere Stufe   Kanal, es ist kein eigenständiges Architekturelement?

Channel ist ein Architekturelement, das das Proxy-Software-Entwurfsmuster implementiert. Alle Kanäle sind Proxies. Wenn Sie Client-Code schreiben, ist der Kanal der obersten Ebene am nützlichsten, da er .NET-Vorgangsverträge akzeptiert.

    
ErnieL 14.03.2013 17:23
quelle

Tags und Links