Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 16 Web Services
|  | 16.1 Wie Web Services funktionieren
|  |  | 16.1.1 Basistechnologie HTTP
|  |  | 16.1.2 Basistechnologie XML
|  |  | 16.1.3 Basistechnologie SOAP
|  |  | 16.1.4 Umdenken beim Entwickeln von Web Services
|  | 16.2 Einen einfachen Web Service erstellen und anbieten
|  |  | 16.2.1 Die Datei webservice01.asmx erstellen
|  |  | 16.2.2 webservice01.asmx im Browser aufrufen
|  | 16.3 Einen Web Service verwenden
|  |  | 16.3.1 Eine Proxyklasse erstellen
|  | 16.4 Einen Web Service mit einem SOAP-Header sichern
|  |  | 16.4.1 Einen passwortgeschützten Web Service erstellen
|  |  | 16.4.2 Die Proxyklasse erzeugen
|  |  | 16.4.3 Den passwortgeschützten Web Service aufrufen
|  |  | 16.4.4 Fazit: Web Services und Sicherheit
|  | 16.5 Ein DataSet-Objekt übertragen
|  |  | 16.5.1 Den Web Service in einer asmx-Datei erstellen
|  |  | 16.5.2 Die Proxyklasse erzeugen
|  | 16.6 Web Services finden
|  |  | 16.6.1 Discovery
|  |  | 16.6.2 UDDI
|  | 16.7 Zusammenfassung und Ausblick
|  |  | 16.7.1 Zusammenfassung
|  |  | 16.7.2 Ausblick
|  |  | 16.7.3 Ressourcen
## 16.3 Einen Web Service verwenden Beim realen Einsatz von Web Services stellt sich für denjenigen, der einen Web Service nutzen will, als Erstes die Aufgabe, den passenden Web Service zu finden. Dazu gibt es eine Reihe von Technologien, zu denen Discovery-Dateien und UDDI gehören. Mit Hilfe dieser Technologien ist es möglich, den URL des gewünschten Web Services zu ermitteln. Der Einfachheit halber soll dieser Schritt hier jedoch zunächst noch ausgeblendet werden. Denn wenn Sie den URL des Web Services, den Sie nutzen möchten, bereits kennen, können Sie ohne weitere Umwege direkt damit beginnen, den Web Service zu nutzen. Von dieser Situation soll zunächst ausgegangen werden. Diejenige Software, die den Web Service eines anderen Rechners nutzen möchte, kann eines nicht: Sie kann den Web Service nicht einfach über den URL aufrufen. Für die Kommunikation mit dem Web Service müssen erst die geeigneten SOAP-Daten erzeugt werden. Dazu gehört ein SOAP-Umschlag mit den korrekten Daten für den SOAP-Header und den SOAP-Body. Insgesamt ist das relativ viel Arbeit. Diese aufwendige Kommunikationsarbeit muss nicht die Anwendungs-Software selbst ausführen. Diese Arbeit kann stattdessen eine Proxyklasse übernehmen. Eine Proxyklasse kann man sich so ähnlich wie einen Kurier vorstellen. Wenn Person A und Person B sich austauschen möchten, aber zu weit voneinander entfernt sind, um direkt miteinander reden zu können, können sie ihre Nachrichten einem Kurier anvertrauen. Der Kurier kennt den Weg und transportiert die Nachrichten hin und her. Die beiden Personen reden nie direkt miteinander, sondern immer nur über den Kurier. Durch den Einsatz des Kuriers haben die beiden Personen den Vorteil, dass sie nicht selbst hin- und herreisen müssen, sondern zuhause bleiben können. Einen solchen Kurier muss der Entwickler, der einen Web Service nutzen will, in Form einer Proxyklasse erstellen. Mit Hilfe dieser Proxyklasse kann der Entwickler in einer gewöhnlichen aspx-Seite etwa folgenden Code schreiben:
    Dim h As new Hallo
    ausgabe.Text = h.sagHallo()
Dieser Code erzeugt ein neues Objekt vom Typ Hallo und ruft anschließend dessen Methode sagHallo() auf. Diese Klasse Hallo ist die Proxyklasse. Wie kann ein Entwickler diese Proxyklasse erstellen? ### 16.3.1 Eine Proxyklasse erstellen Der Entwickler, der den Rechner betreut, der einen Web Service nutzen soll, muss die Proxyklasse erstellen und kompiliert zur Verfügung stellen. Dabei helfen ihm die Web Services Description Language und natürlich die .NET-Werkzeuge. Der Web Service von Rechner 1 muss dem Entwickler, der an Rechner 2 sitzt, irgendwie mitteilen, wie er eigentlich funktioniert. Das kann ein Web Service, denn er spricht die Web Services Description Language (WSDL). Ein Web Service kann sich also mit Hilfe der WSDL selbst beschreiben und diese Selbstbeschreibung einem Interessenten zuschicken. Und .NET kann noch etwas ganz Tolles: .NET kann eine solche Selbstbeschreibung im WSDL-Format entgegennehmen und daraus den VB-Quellcode für die Proxyklasse generieren. Der Entwickler an Rechner 2 muss dann nur noch diesen VB-Quellcode kompilieren und im Verzeichnis /bin einfügen. Damit hat er die benötigte Proxyklasse erstellt. Ein .NET-Entwickler benötigt mit anderen Worten keinerlei Kenntnisse der WSDL und kann dennoch mit ihr arbeiten. #### Den Code der Proxyklasse generieren Das Abrufen der Selbstbeschreibung im WSDL-Format und die Umformung der WSDL-Selbstbeschreibung in VB-Quellcode fasst das Kommandozeilenprogramm wsdl.exe zusammen. Die Syntax von wsdl.exe lautet:
    wsdl [Optionen] { URL | Pfad }
Tabelle 16.1 verzeichnet die Optionen von wsdl.exe.
wsdl [Optionen] URL oder Pfad Als URL geben Sie eine wsdl-, xsd- oder eine disco-Datei an. Wenn Sie einen lokalen Pfad verwenden, können Sie außerdem auch eine discomap-Datei angeben.
/appsettingurlkey: oder /urlkey:<Schlüssel> | Gibt beim Generieren von Code den Konfigurationsschlüssel an, der zum Lesen des Standardwerts für die URL-Eigenschaft verwendet wird
/appsettingbaseurl: oder /baseurl:<Basis-URL> | Gibt beim Berechnen des URL-Fragments den zu verwendenden Basis-URL an. Das Tool berechnet das URL-Fragment durch Konvertierung des relativen URLs aus dem baseurl-Argument zum URL des WSDL-Dokuments. Bei dieser Option müssen Sie die appsettingurlkey-Option angeben.
/domain: oder /d:<Domäne> | Domänenname für die Verbindung zu einem Server mit erforderlicher Authentifizierung
/language: oder /l:<Sprache> | Die Sprache, in der die Proxyklasse generiert werden soll. Zur Auswahl stehen CS (Default), VB und JS.
/namespace: oder /n:<Namensraum> | Der Namensraum für den zu generierenden Proxy. Default ist der globale Namensraum.
/nologo | Unterdrückt die Microsoft-Startmeldung
/out: oder /o:<Dateiname> | Name der Datei, in der der Code der Proxyklasse gespeichert werden soll
/password: oder /p:<Passwort> | Passwort für die Authentifizierung
/protocol:<Protokoll> | Das zu implementierende Protokoll. Zur Auswahl stehen SOAP (Default), HttpGet und HttpPost. In der Konfigurationsdatei kann außerdem ein benutzerdefiniertes Protokoll angegeben werden.
/proxy:<URL> | Der URL des Proxyservers, der verwendet werden soll. Nur nötig, wenn nicht die Standardeinstellung des Systems verwendet werden soll
/proxydomain: oder /pd:<Domäne> | Die Domäne für die Verbindung mit einem Proxyserver, der eine Authentifizierung erfordert
/proxypassword: oder /pp:<Passwort> | Passwort für einen Proxyserver, der eine Authentifizierung erfordert
/proxyusername oder /pu:<Username> | Benutzername für einen Proxyserver, der eine Authentifizierung erfordert
/Server | Generiert eine abstrakte Klasse für einen XML-Webdienst, der auf Verträgen basiert. Standardmäßig werden Client-Proxyklassen generiert.
/username: oder /u:<Username> | Anwendername für einen Server mit erforderlicher Authentifizierung
/? | Listet alle Optionen auf
Tabelle 16.1 Optionen von wsdl.exe Die Proxyklasse für den Hallo-Web-Service erzeugen Sie mit diesem Aufruf:
    wsdl /l:vb /n:myWebServiceConsumer
    http://localhost/ASPdotNETBuch/Listings/webservice01.asmx?WSDL
Mit der Option /l:vb geben Sie an, dass die Klasse in der Sprache VB.NET erzeugt werden soll. Die Option /n:myWebServiceConsumer definiert den Namensraum, unter dem diese Klasse auf Rechner 2 verwendet wird. Abschließend geben Sie den URL des Web Services an und hängen an den URL den Zusatz ?WSDL an. Ihr Web Service erzeugt damit eine Beschreibung seiner selbst im WSDL-Format. Das Konsolenprogramm wsdl.exe kann aus einer Beschreibung in diesem Format eine Proxyklasse erzeugen. Bei erfolgreicher Ausführung meldet das Programm
    Datei ' .....\webservice01.vb' wird geschrieben.
Damit verfügen Sie über den maschinell erzeugten Quellcode für die Proxyklasse, die Sie jetzt noch kompilieren müssen. Der folgende Code wurde erzeugt. Beachten Sie, dass teilweise sehr lange Zeilen entstanden sind, die für den Abdruck mehrfach umbrochen werden mussten. Die Lesbarkeit hat darunter leider gelitten.
    '------------------------------------------------------
    ' <autogenerated>
    '     This code was generated by a tool.
    '     Runtime Version: 1.0.3705.0
    '
    '     Changes to this file may cause incorrect behavior
    '      and will be lost if the code is regenerated.
    ' </autogenerated>
    '------------------------------------------------------

    Option Strict Off
    Option Explicit On

    Imports System
    Imports System.ComponentModel
    Imports System.Diagnostics
    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.Xml.Serialization

    '
    ' Der Quellcode wurde von wsdl automatisch generiert.
    ' Version=1.0.3705.0.
    '
    Namespace myWebServiceConsumer
          '<remarks/>
       <System.Diagnostics. _
                        DebuggerStepThroughAttribute(),  _
        System.ComponentModel. _
                     DesignerCategoryAttribute("code"),  _
        System.Web.Services.WebServiceBindingAttribute _
         (Name:="webservice01Soap", _
         [Namespace]:="http://mlohrer.de/services")>  _
       Public Class webservice01
          Inherits System.Web.Services.Protocols. _
                                    SoapHttpClientProtocol

          '<remarks/>
          Public Sub New()
             MyBase.New
             Me.Url = "http://localhost/ASPdotNETBuch/"
             Me.Url &= "Listings/webservice01.asmx"
          End Sub

          '<remarks/>
          <System.Web.Services.Protocols. _
           SoapDocumentMethodAttribute _
           ("http://mlohrer.de/services/SagHallo", _
           RequestNamespace:= _
            "http://mlohrer.de/services", _
           ResponseNamespace:= _
            "http://mlohrer.de/services", _
           Use:=System.Web.Services.Description. _
            SoapBindingUse.Literal, _
           ParameterStyle:= _
            System.Web.Services.Protocols. _
            SoapParameterStyle.Wrapped)>  _
          Public Function SagHallo() As String
             Dim results() As Object = _
                 Me.Invoke("SagHallo", New Object(-1) {})
             Return CType(results(0),String)
          End Function

          '<remarks/>
          Public Function BeginSagHallo _
           (ByVal callback As System.AsyncCallback, _
            ByVal asyncState As Object) _
            As System.IAsyncResult
             Return Me.BeginInvoke _
              ("SagHallo", New Object(-1) {}, _
               callback, asyncState)
          End Function

          '<remarks/>
          Public Function EndSagHallo _
          (ByVal asyncResult As System.IAsyncResult) _
           As String
             Dim results() As Object = _
                  Me.EndInvoke(asyncResult)
             Return CType(results(0),String)
          End Function
       End Class
    End Namespace
#### Die Proxyklasse kompilieren Kompilieren Sie die generierte Klasse webservice01.vb mit diesem Compiler-Aufruf:
    vbc /t:library /out:../bin/myWebServiceConsumer.dll /r:System.dll
    /r:System.Xml.dll /r:System.Web.Services.dll webservice01.vb
Der Quellcode liegt in der Datei webservice01.vb. Die Zieldatei soll aber nach dem verwendeten Namensraum myWebServiceConsumer.dll heißen. Damit haben Sie die benötigte Proxyklasse erzeugt, und Sie können den Web Service aus Ihrem Programmcode heraus aufrufen. #### Die Proxyklasse verwenden Die Proxyklasse ist eine normale .NET-Klasse. Sie können sie wie jede andere Klasse in Ihrem Code verwenden. Den gewünschten Web Service rufen Sie auf, indem Sie die entsprechende Methode der Proxyklasse aufrufen. webservice01.aspx demonstriert das Verfahren. Abbildung 16.5 zeigt die Darstellung im Browser.
    <!-- webservice01.aspx -->
    <%@ Page language="VB" strict="true" debug="true" %>
    <script runat="server">
    Sub Page_Load (ByVal Sender As Object, _
                   ByVal E As EventArgs)
       Dim w As new myWebServiceConsumer.webservice01
       ausgabe.Text = w.sagHallo()
    End Sub
    </script>
    <html><head>
    <title>Hallo-Webservice</title>
    </head><body>
    <asp:Label
         id="ausgabe"
         runat="server" />
    </body></html>
Hier klicken, um das Bild zu Vergrößern Abbildung 16.5 Primitiv? Von wegen! Das Wort »Hallo« stammt von einem Web Service! Damit haben Sie den ersten Durchgang geschafft. Sie wissen jetzt, dass Sie mit einer asmx-Datei einen Web Service anbieten können. Sie wissen außerdem, dass Sie mit wsdl.exe eine Proxyklasse erzeugen können, wenn Sie einen Web Service nutzen möchten. Sie können die Proxyklasse kompilieren und aus Ihrem Code heraus verwenden.
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de