Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel 16 Web Services
  gp 16.1 Wie Web Services funktionieren
    gp 16.1.1 Basistechnologie HTTP
    gp 16.1.2 Basistechnologie XML
    gp 16.1.3 Basistechnologie SOAP
    gp 16.1.4 Umdenken beim Entwickeln von Web Services
  gp 16.2 Einen einfachen Web Service erstellen und anbieten
    gp 16.2.1 Die Datei webservice01.asmx erstellen
    gp 16.2.2 webservice01.asmx im Browser aufrufen
  gp 16.3 Einen Web Service verwenden
    gp 16.3.1 Eine Proxyklasse erstellen
  gp 16.4 Einen Web Service mit einem SOAP-Header sichern
    gp 16.4.1 Einen passwortgeschützten Web Service erstellen
    gp 16.4.2 Die Proxyklasse erzeugen
    gp 16.4.3 Den passwortgeschützten Web Service aufrufen
    gp 16.4.4 Fazit: Web Services und Sicherheit
  gp 16.5 Ein DataSet-Objekt übertragen
    gp 16.5.1 Den Web Service in einer asmx-Datei erstellen
    gp 16.5.2 Die Proxyklasse erzeugen
  gp 16.6 Web Services finden
    gp 16.6.1 Discovery
    gp 16.6.2 UDDI
  gp 16.7 Zusammenfassung und Ausblick
    gp 16.7.1 Zusammenfassung
    gp 16.7.2 Ausblick
    gp 16.7.3 Ressourcen


Galileo Computing

16.5 Ein DataSet-Objekt übertragen  downtop

Der einzige Datentyp von ADO.NET, der über einen Web Service übertragen werden kann, ist der Typ DataSet. Im Prinzip funktioniert das Verfahren ganz analog zur Übertragung des Strings Hallo und soll kurz demonstriert werden.

Als Übung soll die Tabelle Versandfirmen aus der Nordwind-Datenbank über einen Web Service übertragen werden. Die Beispieldatei db_08.aspx zeigt diese Tabelle im Browser an, ohne dass die Daten über einen Web Service übertragen werden. Im Prinzip teilt die folgende Übung die Funktionalität von db_08.aspx in zwei Teile. Der eine Server besorgt die Daten und schickt sie per Web Service zum zweiten Server, der die Daten in seine aspx-Seite einbaut und diese dann zum Browser schickt.

Wenn Sie den Code eigenhändig nachvollziehen, werden Sie bemerken, dass Sie den Code von db_08.aspx fast vollständig übernehmen können, und zwar die eine Hälfte für den Web Service und die andere Hälfte für die aspx-Datei, die die Daten anzeigt. Dazwischen steht »nur« die Übertragung, die für einen Entwickler damit fast vollständig transparent wird.


Galileo Computing

16.5.1 Den Web Service in einer asmx-Datei erstellen  downtop

Dieser Web Service wird in der Datei webservice03.asmx implementiert. Die Datei enthält die Methode getVersandfirmen. Diese Methode liefert ein DataSet-Objekt mit der Tabelle Versandfirmen. webservice03.asmx hat diese Form:

<!-- webservice03.asmx -->
<%@ WebService Language="VB" Class="webservice03"  %>

Imports System.Data
Imports System.Data.OleDb
Imports System.Web.Services

<WebService( _
   Description := _
      "Bietet Zugriff auf die Nordwind-Datenbank.", _
   Namespace := "http://mlohrer.de/services")> _
Public Class webservice03 : Inherits WebService
   
   <WebMethod( _
      Description := _
         "Liefert die Tabelle Versandfirmen.", _
      EnableSession := False)> _
   Public Function getVersandfirmen() As DataSet
      ' Verbindungszeichenfolge zusammensetzen
      Dim connStr As String 
      connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
      connStr += "Data Source="
      connStr += "E:\ASPdotNETBuch\Listings\"
      connStr += "Nordwind.mdb;"
   
      ' Verbindung zur Datenbank herstellen
      Dim conn As New OleDbConnection(connStr)
      conn.Open()
      
      ' SQL-Kommando erstellen und ausführen
      Dim sql As String
      sql = "SELECT * FROM Versandfirmen"
      Dim cmd As New OleDbCommand(sql, conn)
   
      Dim myAdapter As New OleDbDataAdapter()
      myAdapter.SelectCommand = cmd
      
      Dim myDS As New DataSet()
      myAdapter.Fill (myDS)
      conn.Close()
      
      Return (myDS)  ' DataSet-Objekt zurückgeben         
      
   End Function
End Class

webservice03.asmx enthält keine neuen Merkmale. Die Funktion getVersandfirmen() erhält das Attribut WebMethod. In der Deklaration wird festgelegt, dass die Methode ein Objekt vom Typ DataSet zurückgibt. Der Code innerhalb dieser Funktion entspricht haargenau dem Code, den auch die Beispieldatei db_08.aspx in ihrer Prozedur Page_Load verwendet. Damit wird deutlich, dass auf der Seite des Web Services keinerlei Besonderheiten zu berücksichtigen sind, wenn statt eines einfachen Strings der komplexe Datentyp DataSet ausgeliefert werden soll.


Galileo Computing

16.5.2 Die Proxyklasse erzeugen  toptop

Gedanklich springen Sie jetzt wieder zum zweiten Rechner, der diesen Web Service nutzen will. Hier benötigen Sie eine Proxyklasse, um den Service ansprechen zu können. Den VB-Quellcode für diese Proxyklasse erzeugen Sie mit diesem Aufruf:

wsdl /l:vb /n:DBWebServices 
http://localhost/ASPdotNETBuch/Listings/webservice03.asmx?WSDL

Diesen Code kompilieren Sie mit diesem Aufruf:

vbc /t:library /out:../bin/DBWebServices.dll /r:System.dll 
/r:System.Data.dll /r:System.Xml.dll /r:System.Web.Services.dll webservice03.vb

Beim Kompilieren müssen Sie zusätzlich die Bibliothek System.Data.dll referenzieren. Damit steht Ihnen die Proxyklasse zur Verfügung. webservice03.aspx verwendet diese Klasse, ruft das DataSet ab und stellt es in einem DataGrid-Steuerelement dar.

<!-- webservice03.aspx -->
<%@ Page language="VB" strict="true" debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _ 
               ByVal E As EventArgs) 
   Dim w As new DBWebServices.webservice03
   Dim myDS As New DataSet()
   myDS = w.getVersandfirmen()
   myGrid.DataSource = myDS 
   DataBind()
   End Sub
</script>
<html><head>
<title>Datenbank-Webservice</title>
</head><body>
<p>
Die Tabelle Versandfirmen aus der Nordwind-Datenbank:
</p> 
<asp:DataGrid id="myGrid" runat="server" />
</body></html>

Abbildung 16.7 zeigt das Endergebnis im Browser. Im Browser ist nicht mehr zu erkennen, dass die dargestellten Daten nicht von dem direkt angesprochenen Webserver, sondern von einem anderen Server stammen. Genau dieser Effekt ist erwünscht. Die übertragenen Daten fügen sich nahtlos ein und können vom Webserver genau so verarbeitet werden, als wenn es »eigene« Daten wären.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 16.7 Im Browser ist nicht mehr zu erkennen, dass das dargestellte DataSet über einen Web Service ermittelt wurde

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




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