ASP.NET ist für mich Neuland. Geschäftlich habe ich mich lange mit der Programmierung unter “Classic” ASP beschäftigt, Skriptsprache JScript, und wer sich damit auskennt, wird verstehen, warum ich sehr begeistert von ASP.NET bin ;-)
Es kostete mich dennoch etwas Einarbeitungszeit, erfolgreich einen Web-Service unter Verwendung einer von diesem Service bereitgestellten WSDL1-Datei mit ASP.NET (Skriptsprache C#) unter dem Microsoft-Webserver IIS anzusprechen und nutzen zu können.
Daher dieses kleine Tutorial. Ich werde kurz erklären:
- Was man zum Ansprechen eines Web-Services unter ASP.NET benötigt
- Wie man zum Webservice passende Proxyklassen erzeugt und kompiliert
- Wie man mittels der neu erstellen Proxyklassen auf den Web-Service zugreift
Voraussetzungen
Benötigt werden
- das Microsoft .NET Framework
- das “Microsoft Windows SDK for Windows 7 and .NET Framework”2 in der zum Framework passenden Version
- ein beliebiger Quelltexteditor3
Proxyklassen
Proxyklassen erleichtern den Zugriff auf den Web-Service, indem sie eine objektorientierte Schnittstelle bieten. Praktischerweise gibt es im oben angeführten SDK ein Programm “wsdl.exe”, das diese automatisch generieren kann! Das Took liegt im Bin-Verzeichnis des SDKs, also beispielsweise “C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\wsdl.exe”. Eine genauere Übersicht über die Möglichkeiten von wsdl.exe und das Erstellen von Proxyklassen findet sich im OpenBook von Galileo Press zu ASP.NET4.
Ein Beispielaufruf des Tools ist
wsdl /l:cs /n:myWebServiceConsumer /o:proxyklasse.cs http://www.domain.tl/webservice.asmx?WSDL,
wobei /l:cs besagt, dass die Zielsprache C# sein soll. Ebenso denkbar ist z.B. /l:vb für VB.NET; ich finde VB (Visual Basic) aber sehr hässlich ;-). Der Name für die Proxyklasse, unter dem sie später verwendet wird, ist als myWebServiceConsumer angegeben und kann beliebig variiert werden – man sollte ihn sich nur merken. Das Hauptargument ist die URL zur WSDL-Beschreibung des Web-Services.
Das Ergebnis dieses Aufrufes ist die Datei “proxyklasse.cs”, deren Namen unabhängig vom angegebenen Namen (Namespace) der Proxyklasse über den Parameter /o angegeben werden kann.
Nun muss die Proxyklasse nur noch kompiliert werden. Dazu liefert das .NET-Framework den C#-Compiler csc, der bei mir unter “C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe” liegt. Ein möglicher Aufruf ist
csc /t:library /out:myWebServiceConsumer.dll /r:System.dll
/r:System.Xml.dll /r:System.Web.Services.dll proxyklasse.cs
Das Ergebnis ist die DLL-Datei myWebServiceConsumer.dll: Unsere fertig kompilierte Proxyklasse, die wir im nächsten Schritt direkt einbinden können.
Einbindung
Benutzt werden kann die im letzten Schritt erstellte Proxyklasse, indem sie in den bin-Ordner der IIS-Site kopiert wird, in der sie verwendet werden soll. Der Ordner “bin” muss gegebenenfalls neu erstellt werden. Bei einer Standardkonfiguration der Site werden die dort enthaltenen Bibliotheken automatisch geladen. Ich empfehle, die Site über den IIS-Manager neu zu starten, um sicherzugehen, dass die Proxyklasse auch geladen wird.
Die Klasse kann nun in einer aspx-Datei, in der sie benötigt wird, mit der Direktive
<%@ Import Namespace="myWebServiceConsumer" %>
eingebunden werden. Danach kann man objektorientiert auf den Web-Service zugreifen; besitzt dieser bspw. eine Klasse StringPrinter mit der Methode printSomeString(), kann einfach eine neue Instanz angelegt und auf die Methode zugegriffen werden:
StringPrinter sp = new StringPrinter(); sp.printSomeString();
Auskunft darüber, welche Klassen und Methoden der Web-Service und damit die Proxyklasse zur Verfügung stellt, erhält man entweder über die Dokumentation des Web-Services, über den Inhalt der WSDL-Datei (diese liegt im XML-Format vor und kann mit einem Browser gelesen werden) oder über den Quelltext der Proxyklasse selbst, also über die Datei “proxyklasse.cs”.
Fußnoten
1 http://de.wikipedia.org/wiki/WSDL
2 Version 3.5 Download von Microsoft
3 Der Quelltexteditor ist wirklich beliebig, Windows Notepad genügt vollkommen. Praktischer und auch kostenlos ist allerdings Microsoft Visual Web Developer 2010 Express