Service Proxy
Ein Service Proxy verschafft einem Client Zugang zu einem Webservice. Dieser kann ein Webservice (also ein Service Host, der auf einen Service inklusive Service Contract zeigt) sein, der lokal im FS definiert wurde oder ein externer Webservice im Internet. Der Service Proxy übernimmt an dieser Stelle die Generierung des Codes, der nötig ist, um auf die Operationen, die der Webservice bereitstellt, zuzugreifen. Er kapselt somit auch die gesamte EndPoint- und somit WCF-Stack-Channel-Definition des Webservice. Dies wird vor allem dann hilfreich, wenn aus der WSDL-Definition eines Webservices im Internet ein passender Client erstellt werden soll, der sich genau an die Richtlinien des Webservice hält.
Service Proxy für Service Hosts aus dem Repository
Name
Definiert den Namen des Service Proxy.
Registerkarte General
Um Service Hosts aus dem Repository in den Service Proxy einzubinden wird der Radiobutton Service from this repository gewählt. Danach kann über den Button Choose Host aus dem Namespace-Tree ein beliebiges Service Host-Element ausgewählt werden.
Die Combobox EndPoint zeigt nun alle im Webservice verfügbaren EndPoints, die angesprochen werden können.
Mit der Checkbox Generate wrapper for all proxy methods kann im generierten Code des Service Proxy für jede Methode eine Wrapper-Methode angelegt werden.
Beispiel:
Ist das Häkchen gesetzt, kann später im Code (z.B. in einer Component) wie folgt auf die Methoden zugegriffen werden:
dcPC[] pcs;
using (PcListSvcProxy proxy = new PcListSvcProxy(this.Global))
{
pcs = proxy.GetPcList(ID);
}
Ist das Häkchen nicht gesetzt, sieht der Aufruf wie folgt aus:
dcPC[] pcs;
using (PcListSvcProxy proxy = new PcListSvcProxy(this.Global))
{
pcs = proxy.Proxy.GetPcList(ID);
}
Der Aufruf findet also über die Interne Proxy-Klasse des Service Proxy-Elements statt.
Registerkarte Methods
Hier können beliebig Methoden implementiert werden, die die Service Proxy-Klasse anbieten soll.
Registerkarte Service Operations
Liste der Methoden am Service Proxy:
Hier werden alle Methoden des Webservice aufgelistet, die der Webservice anbietet bzw. auf die der Service Proxy zugreifen kann.
Registerkarte EndPoint
Hier wird die EndPoint-Definition in Form von XML angezeigt. Diese kann mit dem Häkchen Overwrite EndPoint manuell überschrieben werden.
Registerkarte Binding
Hier wird die Binding-Definition in Form von XML angezeigt. Diese kann mit dem Häkchen Overwrite Binding manuell überschrieben werden.
Registerkarte EndPoint Behavior
Hier wird die EndPoint Behavior-Definition in Form von XML angezeigt. Diese kann mit dem Häkchen Overwrite EndPoint Behavior manuell überschrieben werden.
Service Proxy für einen externen Webservice im Internet
Um externe Webservices im Internet in die Anwendung einzubinden, wird der Radiobutton External service im Service Proxy gewählt.
Im Feld Service Address wird die Adresse des Webservices im Internet angegeben. Mit der Combobox Contract kann optional aus dem Namespace-Tree ein Service Contract ausgewählt werden, den der Proxy mit implementieren soll.
Die Combobox EndPoint wird automatisch gefüllt, wenn die Proxy-Klasse mit dem Button Generate Proxy (siehe Registerkarte SvcUtil Options) aus der WSDL-Definition des Webservice generiert wird. Danach stehen alle EndPoints, die der Webservice anbietet, zur Auswahl.
Mit dem Button Test Service wird der mit Visual Studio ausgelieferte WCF-Testclient gestartet und versucht, den angegebenen Webservice zu laden.
Die verschiedenen EndPoints (im Beispiel „CurrencyCenvertorSoap“ und „CurrencyConvertorSoap12“) und die erreichbaren Methoden werden angezeigt. Mit einem Doppelklick auf eine der Methoden kann diese im rechten Fenster getestet und die SOAP-Envelopes des Request und Response in XML-Format eingesehen werden.
Registerkarte SvcUtil Options
Mit dem Häkchen bei \Async wird bei der Generierung des Proxy-Codes je Methode eine Signatur für den synchronen und eine für den asynchronen Aufruf erstellt. Somit ist es möglich, später in der Anwendung zu entscheiden, ob der Webservice synchron oder asynchron (z.B. wie bei AJAX) aufgerufen werden soll.
Mit \Collection Type wird angegeben, welche Art von Collection-Typ die Proxy-Klasse für Collection-Parameter im Webservice verwenden soll.
Mit dem Button Generate Proxy wird im Hintergrund der tatsächliche Programmcode des Proxy und die dazugehörige App.Config-Datei generiert. Dies geschieht über das Tool SvcUtil.exe, welches mit dem Windows SDK ausgeliefert wird. Wo die EXE auf dem System liegt, kann unter Tools > Options > Utilities > SvcUtil angegeben werden. Der Standardpfad ist C:\Programme\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe.
Die Metadaten des Webservice werden in Form der WSDL-Definition heruntergeladen und auf Basis dieser der Proxy erstellt. Dabei werden auch die Informationen über die verfügbaren EndPoints eingelesen und in der Combobox EndPoint zur Auswahl bereitgestellt.
Registerkarte Generated Code
Hier kann der von SvcUtil.exe generierte Proxy-Code eingesehen werden.
Registerkarte Generated App.Config
Hier kann die von SvcUtil.exe generierte App.Config-Datei eingesehen werden.
Generieren eines Data Contracts aus einem Service Proxy
Im Menüpunkt Edit befindet sich der Eintrag Generate Data Contracts. Damit wird auf Basis des ausgewählten Service Proxy ein (oder mehrere) Data Contract-Element(e) im selben Namespace generiert. Dies ist nur für externe Webservices möglich.
Ableiten und Customizen von ServiceProxies
ServiceProxies können abgeleitet und gecustomized werden. Lediglich EndPoints, Bindings und Behaviors können bearbeitet werden. Eine Änderung des Service Host ist nicht möglich und auch ein Aufruf von SvcUtil.exe wird nicht angeboten.