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.4 Einen Web Service mit einem SOAP-Header sichern Wenn Ihr Web Service nicht öffentlich zugänglich sein soll, sondern nur von registrierten Kunden genutzt werden darf, müssen Sie den Web Service gegen unbefugte Nutzung absichern. Eine Möglichkeit zur Realisierung besteht darin, vom anfragenden Web-Service-Konsumenten den Namen und das Passwort zu verlangen. Beides können Sie in einem SOAP-Header übertragen. ### 16.4.1 Einen passwortgeschützten Web Service erstellen Das webservice01.asmx-Beispiel soll um einen solchen Authentifizierungsmechanismus erweitert werden. webservice02.asmx enthält den Code für den passwortgeschützten Web Service. Erläuterungen schließen sich an.
    <!-- webservice02.asmx -->
    <%@ WebService Language="VB" Class="webservice02"  %>
    Imports System
    Imports System.Web.Services
    Imports System.Web.Services.Protocols

    Public Class Zugangserlaubnis : Inherits SoapHeader
       Public username As String
       Public passwort As String
    End Class

    <WebService( _
     Description := "Sagt passwortgeschützt Hallo.", _
     Namespace := "http://mlohrer.de/services")> _
    Public Class webservice02 : Inherits WebService

       Public myZugang As Zugangserlaubnis

       <WebMethod _
         (Description := "Sagt passwortgeschützt Hallo.", _
          EnableSession := False), _
          SoapHeader("myZugang")> _
       Public Function SagHallo() As String
          If myZugang Is Nothing Then
             throw new Exception _
                    ("Authentifizierung erforderlich. ")
          Else
             Dim validUser As String = "ML"
             Dim validPass As String = "hugo2799"
             If myZugang.username = validUser AND _
                myZugang.passwort = validPass Then
                Return ("Hallo")
             Else
                throw new Exception ("Login ungültig.")
             End If

          End If
       End Function
    End Class
webservice02.asmx enthält zwei Klassendefinitionen. Die erste Klasse heißt Zugangserlaubnis und erbt von der Klasse SoapHeader. Die Klasse SoapHeader ist der Laufzeitumgebung bekannt, weil Sie zunächst den Namensraum System.Web.Services.Protocols importiert haben. Die Klasse Zugangserlaubnis ist sehr einfach aufgebaut. Sie enthält lediglich eine Eigenschaft username und eine Eigenschaft passwort. Die zweite Klasse heißt webservice02, erbt von der WebService-Klasse und enthält den eigentlichen Web Service. Daher ist sie auch mit dem WebService-Attribut ausgezeichnet. Die Methode SagHallo() soll als Web Service zugänglich gemacht werden und wird deshalb mit dem WebMethod-Attribut ausgezeichnet. Innerhalb der Definition des WebMethod-Attributs legen Sie unter anderem fest, dass diese Methode einen SOAP-Header benötigt, der ein Zugangserlaubnis-Objekt transportieren soll. Gültige Werte für den Anwender und das Passwort werden im Code hart codiert. Wenn Sie webservice02.asmx testweise im Browser aufrufen und den Vorgang SagHallo anklicken, dann werden die Beispielanfrage und -antwort nur im SOAP-Format angezeigt (siehe Abbildung 16.6). SOAP-Header können nur mit SOAP übertragen werden. HTTP-GET und POST scheiden hier aus und deswegen ist auch kein Testformular für die GET-Methode verfügbar. ### 16.4.2 Die Proxyklasse erzeugen Nun schalten Sie in Gedanken wieder um auf den Rechner, der diesen Service nutzen möchte. Hier stellt sich die Aufgabe, die entsprechende Proxyklasse zu erzeugen und beim Aufruf des Web Services den Namen und das Passwort zu übermitteln. Der folgende Aufruf erstellt den VB-Quellcode für die Proxyklasse. Dabei wird der Namensraum SafeWebServices verwendet.
    wsdl /l:vb /n:SafeWebServices
    http://localhost/ASPdotNETBuch/Listings/webservice02.asmx?WSDL
Den erstellten Quellcode kompilieren Sie mit diesem Befehl in die Datei SafeWebServices.dll:
    vbc /t:library /out:../bin/SafeWebServices.dll /r:System.dll
    /r:System.Xml.dll /r:System.Web.Services.dll webservice02.vb
Hier klicken, um das Bild zu Vergrößern Abbildung 16.6 Die Übertragung von Name und Passwort erfordert die Verwendung von SOAP. HTTP-POST und GET scheiden aus. ### 16.4.3 Den passwortgeschützten Web Service aufrufen Beim Aufruf der passwortgeschützten Web Services müssen Sie Namen und Passwort an den Web Service übermitteln. webservice02.aspx zeigt das Verfahren:
    <!-- webservice02.aspx -->
    <%@ Page language="VB" strict="true" debug="true" %>
    <script runat="server">
    Sub Page_Load (ByVal Sender As Object, _
                   ByVal E As EventArgs)
       Dim pass As New SafeWebServices.Zugangserlaubnis
       Dim serv As New SafeWebServices.webservice02
       pass.username = "ML"
       pass.passwort = "hugo2799"
       serv.ZugangserlaubnisValue = pass
       ausgabe.Text = serv.sagHallo()
    End Sub
    </script>
    <html><head>
    <title>Hallo-Webservice</title>
    </head><body>
    <asp:Label
         id="ausgabe"
         runat="server" />
    </body></html>
In der Prozedur Page_Load erzeugen Sie zunächst ein Objekt von der Klasse SafeWebServices.Zugangserlaubnis:
    Dim pass As New SafeWebServices.Zugangserlaubnis
Anschließend erstellen Sie ein Objekt für den Web Service selbst:
    Dim serv As New SafeWebServices.webservice02
Dem pass-Objekt weisen Sie anschließend Namen und Passwort zu:
    pass.username = "ML"
    pass.passwort = "hugo2799"
Und in der nächsten Zeile passiert etwas Interessantes:
    serv.ZugangserlaubnisValue = pass
Woher kommt die Eigenschaft ZugangserlaubnisValue? Die Erklärung folgt gleich. Werfen Sie erst noch einen Blick auf die letzte Zeile:
    ausgabe.Text = serv.sagHallo()
Hier gibt es nichts Neues. Die sagHallo()-Methode wird aufgerufen und der Rückgabewert wird dem Label-Feld ausgabe als Text-Eigenschaft zugewiesen. Nun zurück zu dieser Zeile:
    serv.ZugangserlaubnisValue = pass
Das Tool wsdl.exe hat diese Eigenschaft generiert, als es die Selbstbeschreibung des Web Services ausgewertet und den VB-Quellcode erstellt hat. Wenn Sie die Quelldatei der Proxyklasse webservice02.vb öffnen, können Sie die Funktionsweise direkt am Code nachvollziehen. Hier finden Sie unter anderem diese Zeilen
    Public Class webservice02 Inherits
       System.Web.Services.Protocols.SoapHttpClientProtocol

       Public ZugangserlaubnisValue As Zugangserlaubnis
       ' ...
    End Class
### 16.4.4 Fazit: Web Services und Sicherheit Der vorgestellte Passwortschutz mit Hilfe eines SOAP-Headers hat nur einen beschränkten praktischen Nutzen, da die Daten selbst, und dazu gehören auch der Anwendername und das Passwort, im Klartext übertragen werden. Um das zu vermeiden, muss HTTPS eingesetzt werden. Spezifikationen für einen sicheren und transaktionsfähigen Einsatz von Web Services befinden sich derzeit noch in der Entwicklung. Einen Schritt in diese Richtung geht beispielsweise ein Projekt der Unternehmen BEA, IBM und Microsoft. Die Unternehmen haben gemeinsam die Business Process Execution Language for Web Services (BPEL4WS oder BPEL) entwickelt. Mit BPEL sollen sich Web Services einfach und zuverlässig zu verteilten Anwendungen kombinieren lassen. BPEL ist eine XML-Sprache zur Definition von Geschäftsprozessen. Auf der Basis von BPEL sollen sich künftig auch Transaktionen über Web Services ausführen lassen. Solange entsprechende Spezifikationen jedoch noch nicht vollständig vorliegen und auch in der Praxis erst ungenügend erprobt sind, eignen sich Web Services nur in begrenztem Maße für den unternehmenskritischen Einsatz.
<< 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