Migrieren vom SOAP Toolkit zu Webdiensten

Veröffentlicht: 19. Mrz 2002 | Aktualisiert: 21. Jun 2004

Von Peter Vogel

Dieser Artikel beschreibt, wie Sie auf einen Webdienst sowohl von Visual Basic 6.0 als auch von Visual Basic .NET aus zugreifen, und wie Sie Ihre vorhandenen SOAP-Anwendungen für die .NET-Plattform konvertieren.

* * *

Ziele

  • Kennenlernen der SOAP-Tools in Microsoft® Visual Studio® .NET

  • Untersuchen des Zugriffs auf COM/COM+-Komponenten mit SOAP und Visual Basic® 6.0

  • Zugreifen auf Webdienste von Visual Basic .NET aus

  • Migrieren von SOAP Toolkit-Anwendungen zu Webdiensten

Voraussetzungen

  • Sie haben verstanden, was ein Webdienst ist

  • Sie haben Erfahrung mit und Zugriff auf Visual Basic 6.0 sowie SOAP und können ein ActiveX®-DLL-Projekt erstellen

  • Sie sind mit den Grundlagen von Visual Studio .NET vertraut

Auf dieser Seite

Webdienste, SOAP und Ihre Tools Webdienste, SOAP und Ihre Tools
WSDL-Tools WSDL-Tools
Überblick über SOAP Toolkit 2.0 Überblick über SOAP Toolkit 2.0
Übersicht über Visual Basic .NET Übersicht über Visual Basic .NET
Erstellen des Clients Erstellen des Clients
Konvertieren vom SOAP Toolkit zu Visual Studio .NET Konvertieren vom SOAP Toolkit zu Visual Studio .NET
Zusammenfassung Zusammenfassung
Informant Communications Group Informant Communications Group

Webdienste, SOAP und Ihre Tools

Ein Webdienst liefert Funktionalität, auf die Sie über das Internet zugreifen können. Sie rufen einen Webdienst auf, und erhalten als Antwort ein Ergebnis. Das Neue an Webdiensten ist, dass Sie jetzt eine Verbindung mit Diensten über das größte Netzwerk der Welt, das Internet, herstellen. Als Visual-Basic-Programmierer werden die komplizierten Details, die mit der Arbeit über das Internet verbunden sind, für Sie automatisch erledigt.

In diesem Dokument wird erläutert, wie Sie auf einen Webdienst mit Visual Studio .NET zugreifen. Außerdem wird die Erstellung eines Webdienstes mit Visual Basic 6.0 und dem SOAP Toolkit, Version 2.0, untersucht. Daneben wird demonstriert, wie Sie Ihre vorhandenen SOAP-Toolkit-Anwendungen für die Verwendung von Webdiensten im .NET Framework konvertieren.

Der in diesem Dokument verwendete Webdienst hat eine sehr einfache Funktion mit der Bezeichnung createCustomer. Sie akzeptiert den Vor- und Nachnamen eines Kunden und gibt eine Kunden-ID zurück. Die eigentliche Funktionalität des Webdienstes ist für diese Ausführungen nicht relevant. Sie können sich darauf konzentrieren, wie Sie den Webdienst mit entweder Visual Basic 6.0 oder Visual Basic .NET erstellen und darauf zugreifen.

Visual Basic und SOAP

Sie kommunizieren mit einem Webdienst durch das Senden und Empfangen von SOAP-Dokumenten. In Visual Basic 6.0 gibt es zwei Möglichkeiten für die Erstellung eines SOAP-Dokuments:

  1. Erstellen des Dokuments durch das Verketten von Zeichenfolgen

  2. Verwenden von SoapClient aus SOAP Toolkit, Version 2.0

SoapClient erstellt nicht nur ein SOAP-Dokument, um mit einem Webdienst zu kommunizieren, sondern sendet auch das Dokument zur Verarbeitung an den Webdienst.

Auf Seiten des Webdienstes benötigen Sie für die Übertragung einen SOAP-Listener, um das von einem Client gesendete Dokument aufzufangen und zu verarbeiten. Das SOAP Toolkit, Version 2.0 enthält die SoapServer-Funktion, die Sie in einer Listeneranwendung zur Verarbeitung von SOAP-Dokumenten verwenden. Der Listener befindet sich in einer separaten Anwendung, die Sie unabhängig von der Komponente erstellen, die den Webdienst implementiert hat.

Mit Visual Studio .NET wurde die Erstellung und der Zugriff auf Webdienste vereinfacht. In Visual Studio .NET wird für die Erstellung eines Webdienstes keine separate Listeneranwendung vorausgesetzt. Beim Zugriff auf einen Webdienst werden Proxys automatisch erstellt, wodurch die Arbeit mit einem Webdienst wie der Zugriff auf jedes andere Objekt erscheint.

 

WSDL-Tools

WSDL (Web Service Description Language) ist eine XML-Sprache, die speziell für die Beschreibung von Webdiensten erstellt wurde. Im Zuge der Einführung von Webdiensten als offener Standard wurde WSDL zusammen mit SOAP der W3C-Kommission vorgestellt. Eine WSDL-Beschreibung eines Dienstes kann ein wsdlSpec-tModel enthalten, das alle erforderlichen Informationen zum Erstellen und Senden eines SOAP-Dokuments für den Dienst enthält. Eine Datei für ein wsdlSpec-tModel zur Unterstützung der createCustomer-Funktion könnte wie folgt aussehen:

<?xml version='1.0' encoding='UTF-8' ?>  
 <!-- Generated 06/25/01 by Microsoft SOAP Toolkit WSDL  
      File Generator, Version 1.00.623.1 -->  
<definitions  name ='cust'    
    targetNamespace = 'http://tempuri.org/wsdl/' 
    xmlns:wsdlns='http://tempuri.org/wsdl/'  
    xmlns:typens='http://tempuri.org/type'  
    xmlns:soap='https://schemas.xmlsoap.org/wsdl/soap/'  
    xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
    xmlns:stk= 
'https://schemas.microsoft.com/soap-toolkit/wsdl-extension' 
    xmlns='https://schemas.xmlsoap.org/wsdl/'>  
  <types> 
    <schema targetNamespace='http://tempuri.org/type' 
      xmlns='http://www.w3.org/2001/XMLSchema' 
      xmlns:SOAP-ENC= 
         'https://schemas.xmlsoap.org/soap/encoding/' 
      xmlns:wsdl='https://schemas.xmlsoap.org/wsdl/' 
      elementFormDefault='qualified'> 
    </schema> 
  </types> 
  <message name='Custservices.createCustomer'> 
    <part name='First' type='xsd:string'/> 
    <part name='Last' type='xsd:string'/> 
  </message> 
  <message name='Custservices.createCustomerResponse'> 
    <part name='Result' type='xsd:string'/> 
  </message> 
  <portType name='CustservicesSoapPort'> 
    <operation name='createCustomer'  
      parameterOrder='First Last'> 
      <input message= 
         'wsdlns:Custservices.createCustomer' /> 
      <output  
   message='wsdlns:Custservices.createCustomerResponse' /> 
    </operation> 
  </portType> 
  <binding name='CustservicesSoapBinding'  
           type='wsdlns:CustservicesSoapPort' > 
    <stk:binding preferredEncoding='UTF-8'/> 
    <soap:binding style='rpc'  
      transport='https://schemas.xmlsoap.org/soap/http' /> 
    <operation name='Add' > 
      <soap:operation soapAction= 
         'http://tempuri.org/action/Custservices.Add' /> 
      <input> 
        <soap:body use='encoded'  
         namespace='http://tempuri.org/message/' 
         encodingStyle= 
         'https://schemas.xmlsoap.org/soap/encoding/' /> 
      </input> 
      <output> 
        <soap:body use='encoded'  
         namespace='http://tempuri.org/message/' 
        encodingStyle= 
         'https://schemas.xmlsoap.org/soap/encoding/' /> 
      </output> 
    </operation> 
  </binding> 
  <service name='cust' > 
    <port name='CustservicesSoapPort'  
      binding='wsdlns:CustservicesSoapBinding' > 
      <soap:address  
      location='https://localhost/customer/cust.ASP' /> 
    </port> 
  </service> 
</definitions> 

Das <service>-Tag am Ende des wsdlSpec-tModels gibt an, an welchen SOAP-Listener die Anforderung gesendet werden soll, in diesem Fall an die Seite https://localhost/cust/cust.asp. Die vorangegangenen Abschnitte der Datei beschreiben die Nachrichten, die mit dem Dienst verwendet werden können.

Anmerkung Bei dem im SOAP-Dokument verwendeten Namespace tempuri.org handelt es sich um einen temporären Namespace, der nur während der Entwicklung verwendet wird ("temporäre URI"). Bevor Sie den Dienst für die Produktion freigeben, sollten Sie in der WSDL-Datei eine eindeutige URI eingeben (beispielsweise, den URL der Website Ihrer Firma).

Sowohl die SOAP Toolkit-Objekte als auch die Visual Studio .NET-IDE lesen WSDL-Dateien. SoapClient verwendet die Informationen in der WSDL-Datei, um als Proxy für den Webdienst fungieren zu können. Visual Studio .NET verwendet dieselben Informationen zur Generierung der Proxyklassen für den Webdienst. Daraus ergeben sich für Sie folgende Möglichkeiten:

  • Sie können Methoden des Webdienstes aufrufen, als ob dies Methoden dieser Proxys wären.

  • Sie können Ihre Aufrufe anhand der WSDL-Beschreibung des Webdienstes überprüfen, bevor die Nachricht gesendet wird.

  • Sie können mit dem Proxy interagieren, ohne mit dem Inhalt der WSDL-Datei oder dem generierten SOAP-Dokument vertraut sein zu müssen.

Abbildung 1 zeigt die Beziehungen zwischen den unterschiedlichen Komponenten, einschließlich der WSML-Datei (Web Services Meta Language), die nur bei Visual Basic 6.0 erforderlich ist und in dieser Übersicht beschrieben wird.

Bild01

Abbildung 1. Schema eines Webdienstes und eines Clients

Innerhalb der SOAP-Technologie führen das SOAP Toolkit und die Visual Studio .NET-IDE analoge Funktionen aus. Jedoch können die SOAP Toolkit-Objekte nicht die vollständige Unterstützung bieten, die Visual Basic-Entwickler erwarten. In Abbildung 2 sehen Sie die Art von IntelliSense®-Unterstützung, die Visual Basic-Programmierer als selbstverständlich ansehen. Die IntelliSense-Dropdownliste zeigt automatisch die createCustomer-Methode für das CustomerServices-COM-Objekt.

Bild02

Abbildung 2. IntelliSense-Unterstützung für COM-/DCOM-/COM+-Objekte

In Abbildung 3 sehen Sie die IntelliSense-Unterstützung, die SoapClient einem Webservice zur Verfügung stellt. Es werden zwar alle Methoden von SoapClient aufgelistet, die Methoden des Dienstes, für die SoapClient als Proxy fungiert, (d. h. createCustomer) werden jedoch nicht angezeigt.

Bild03

Abbildung 3. IntelliSense-Unterstützung über SoapClient

In Visual Studio .NET erledigen die von der IDE generierten Proxyklassen die Darstellung des Webdienstes besser als SOAPClient. In Abbildung 4 sehen Sie die IntelliSense-Unterstützung für den Zugriff auf einen Webdienst. Die createCustomer-Methode wird als eine der Methoden des Objekts angezeigt, das zur Interaktion mit dem Webdienst verwendet wird.

Bild04

Abbildung 4. IntelliSense-Unterstützung für Webdienste in Visual Studio .NET

 

Überblick über SOAP Toolkit 2.0

Dieser Abschnitt bietet einen kurzen Überblick über die Erstellung des im vorangegangen Abschnitt Webdienste, SOAP und Ihre Tools beschriebenen Webdienstes.

Erstellen und Zugreifen auf einen Webdienst mit dem SOAP Toolkit

  1. Erstellen Sie in Visual Basic 6.0 ein neues Visual Basic ActiveX-DLL-Projekt mit der Bezeichnung CustCP und das Klassenmodul CustomerServices mit dem Code für den Webdienst:

    Public Function createCustomer(ByVal First As String, _ 
          ByVal Last As String) As String 
    createCustomer = "A" & CStr(Len(First)) & _ 
                            CStr(Len(Last)) 
    End Function
    
  2. Generieren Sie die WSDL- und WSML-Dateien mit dem WSDL-Assistenten des SOAP Toolkits (die WSML-Datei enthält die Informationen, die von SOAPServer verwendet werden, um eine Zuordnung vom Webdienst zum ActiveX-COM-Objekt durchzuführen).

  3. Erstellen Sie den SOAP-Listener als eine ASP-Seite, die SOAPServer verwendet:

  <%@ LANGUAGE=VBScript %> 
  <%Option Explicit 
    Dim ss 
    Dim WSDL 
    Dim WSML 
    Response.ContentType = "text/xml" 
    WSDL = Server.MapPath("cust.wsdl") 
    WSML = Server.MapPath("cust.wsml") 
    Set ss = Server.CreateObject("MSSOAP.SoapServer") 
    ss.Init WSDL, WSML 
    ss.SOAPInvoke Request, Response, ""%>
  
  1. Erstellen Sie den Client, um den Webdienst aufzurufen, den SOAPClient verwendet:
    Private Sub cmdCreate_Click() 
    Dim sc As MSSOAPLib.SoapClient 
    Set sc = New SoapClient 
    sc.mssoapinit "http://vogel2/cust/cust.wsdl" 
    Me.txtCustId.text = _ 
          sc.createCustomer(Me.txtFirstName.text, _ 
                        Me.txtLastName.text) 
    End Sub
  

 

Übersicht über Visual Basic .NET

In diesem Abschnitt werden folgende Verfahren beschrieben:

  • Erstellen eines Webdienstes in Visual Studio .NET.

  • Zugreifen auf den Webdienst von einer Visual Basic .NET-Anwendung aus.

Wenn Sie einen Webdienst in Visual Studio .NET erstellen, wird automatisch eine Discovery-Datei für den Webdienst generiert. Eine Discovery-Datei dient dazu, einen Verweis auf Ihren Webdienst, einschließlich der WSDL-Beschreibung, anderen Visual Studio .NET-Anwendungen hinzuzufügen.

Anmerkung Der Dateityp der Discovery-Datei lautet .vsdisco für Visual Basic- sowie C#-Projekte und .disco für C-Projekte.

Erstellen des Webdienstes in Visual Studio .NET

  1. Klicken Sie im Menü Datei auf Neu, um das Dialogfeld Neues Projekt anzuzeigen (siehe Abbildung 5).

    Bild05

    Abbildung 5. Dialogfeld "Neues Projekt" in Visual Studio .NET

  2. Wählen Sie im Abschnitt Visual Basic-Projekte den Eintrag ASP.NET-Webdienst.

  3. Geben Sie dem Projekt im Feld Name eine Bezeichnung (MigratetoDotNetService).

  4. Geben Sie den URL für die Website des Webdienstes ein (localhost/customer).

  5. Klicken Sie auf OK, um das Projekt zu erstellen. Standardmäßig enthält das Projekt ein Modul mit der Bezeichnung Service1.asmx.

  6. Klicken Sie mit der rechten Maustaste auf das Modul Service1.asmx, und wählen Sie im Kontextmenü den Befehl Code anzeigen.

  7. Fügen Sie den nachfolgenden Code der Public Class Service1-Anweisung am Anfang des Moduls hinzu:

    <WebService(Namespace:="http://phvis.com/customer/", _ 
            Description:="Kundenverwaltung") _ 
    Public Class Service1
    
  8. Kopieren Sie die createCustomer-Funktion aus dem Visual Basic 6.0-Beispiel, fügen Sie jedoch der Deklaration der Funktion das <WebMethod>-Attribut hinzu, um folgendes Ergebnis zu erhalten:

    <WebMethod(Description:= _ 
      "Vor- und Nachname übergeben, ID zurückgeben")> _ 
    Public Function createCustomer( _ 
          ByVal First As String, _ 
          ByVal Last As String) As String
    
  9. Es ist nur eine Änderung erforderlich, um den Visual Basic 6.0-Code in die Visual Basic .NET-Syntax zu konvertieren. Ersetzen Sie createCustomer = in der Funktion durch Return, um folgendes Ergebnis zu erhalten:

    Return "A" & CStr(Len(First)) & _ 
                          CStr(Len(Last)) 
    

End Function

  1. Klicken Sie im Menü Erstellen auf Erstellen, um den Webdienst zu erstellen. Überprüfen Sie das Ausgabefenster auf eventuelle Fehler im Build. Zusammen mit dem Build wird eine Discovery-Datei für Ihre Anwendung generiert.

 

Erstellen des Clients

Sie brauchen keinen .NET-Client zu erstellen - Ihre Visual Basic 6.0-Anwendung, die mit dem SOAP Toolkit erstellt wurde, ist in der Lage, auf den .NET-Webdienst zuzugreifen. Die nachfolgenden Schritte zeigen, wie Sie einen .NET-Client für Ihren Webdienst erstellen, unabhängig davon, ob der Webdienst in Visual Basic 6.0 oder Visual Basic .NET programmiert wurde:

  1. Klicken Sie im Menü Datei auf Neu und anschließend auf Projekt, um das Dialogfeld Projekt hinzufügen anzuzeigen.

  2. Klicken Sie im Abschnitt Visual Basic-Projekte auf Windows-Anwendung.

  3. Geben Sie dem Projekt im Feld Name eine Bezeichnung (MigratetoWebClient), und klicken Sie auf OK, um das Projekt zu erstellen.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie im Kontextmenü den Befehl Webverweis hinzufügen aus. Das Dialogfeld Webverweis hinzufügen wird angezeigt (siehe Abbildung 6).

    Bild06

    Abbildung 6. Das Dialogfeld "Webverweis hinzufügen"

  5. Geben Sie im Feld Adresse den URL für die Datei .vsdisco aus dem Webdienstprojekt ein, z.B. http://localserver/customers/MigratetoNetService.vsdisco. Klicken Sie auf den Pfeil auf der rechten Seite des Feldes Adresse, um Ihren Verweis auszuwählen. Anmerkung: Sie können den URL für die Datei .vsdisco aus Ihrem Webdienstprojekt auch einfügen, indem Sie die Datei .vsdisco aus dem Projektmappen-Explorer in ein Codemodul ziehen. Dadurch wird der URL für die Datei dem Codemodul hinzugefügt. Schneiden Sie anschließend den URL aus dem Codemodul aus, und fügen Sie ihn in das Feld Adresse des Dialogfeldes Webverweis hinzufügen ein.

  6. Klicken Sie auf die Schaltfläche Verweis hinzufügen, um zum Projekt zurückzukehren. Ein Verweis auf Ihren Webdienst wird im Projektmappen-Explorer angezeigt (siehe Abbildung 7).

    Bild07

    Abbildung 7. Eine Visual Basic Windows-Anwendung mit einem Verweis auf einen Webdienst

  7. Fügen Sie dem Formular Textfelder mit der Bezeichnung txtFirstName und txtLastName für den Vor- und Nachnamen des Kunden hinzu, sowie eine Schaltfläche für den Code, der Ihren Webdienst aufruft.

  8. Fügen Sie Code hinzu, der die Variable deklariert, die auf die Proxyklasse zur Verarbeitung Ihres Webdienstes verweist (der Standardname der Klasse wird aus dem Namen des Servers und dem Namen des Dienstes gebildet):

    Private Sub cmdCreate_Click() 
    Dim cc As localhost.service1
    
  9. Fügen Sie Code zur Instanziierung der Proxyklasse und zum Aufruf der Methoden des Webdienstes hinzu:

    Set cc = New localhost.service1 
    Me.txtCustId.text = _ 
          cc.createCustomer(Me.txtFirstName.Text, _ 
                        Me.txtLastName.Text) 
    End Sub
    
  10. Drücken Sie F5, um den Client auszuführen und auf den Webdienst zuzugreifen.

 

Konvertieren vom SOAP Toolkit zu Visual Studio .NET

Anwendungen, die mit dem SOAP Toolkit oder den .NET-Webdiensten programmiert sind, werden gemäß der SOAP-Spezifikation erstellt. Bei SOAP-basierten Anwendungen wird die Verbindung zwischen einem Client und einem Webdienst ausschließlich durch die WSDL-Datei definiert. Ein mit dem SOAP Toolkit erstellter Webdienst kann mit einem Webdienst verwendet werden, der mit .NET erstellt wurde, und umgekehrt. Dadurch kann die Migration vom SOAP Toolkit zu .NET etappenweise erfolgen, indem die WSDL-Definition des Dienstes konstant bleibt. So können beispielsweise die Clients, die auf Ihren Webdienst zugreifen, weiterhin den SOAPClient des SOAP Toolkits verwenden, während Ihr Webdienst nach .NET konvertiert wird.

Die einfachste Methode, um die WSDL-Datei für Ihren Webdienst konstant zu halten, besteht darin, den Visual Basic-Code in das Modul asmx Ihres Webdienstes zu kopieren. Wenn der restliche Code steht, müssen Sie lediglich Ihren Klassenmodulen die Attribute <WebService> und <WebMethod> hinzufügen, um einen .NET-Webdienst zu erstellen. Der Visual Basic 6.0-Code muss in die .NET-Syntax konvertiert werden, wie dies im MSDN und in anderen Artikeln dieser Reihe beschrieben ist. Wenn Sie eine völlig neue .NET-Version Ihres Webdienstes erstellen möchten, kann die WSDL-Datei aus der SOAP Toolkit-Version zur Generierung des Codegerüsts für Ihren Webdienst verwendet werden.

Auf der Clientseite können die unterschiedlichen Clientanwendungen, die auf einen Webdienst zugreifen, einzeln vom SOAP Toolkit zu .NET konvertiert werden. Selbst das Rollout der .NET-Versionen auf einem einzelnen Client kann aufgrund der Interoperabilität der SOAP-Spezifikation stufenweise erfolgen. Um eine Konvertierung vom SOAP Toolkit zu Visual Studio .NET innerhalb des Clients durchzuführen, müssen Sie die Verweise auf SOAPClient mit Verweisen auf die Webdienstproxys ersetzen.

 

Zusammenfassung

In diesem Artikel wurde demonstriert, wie Sie auf einen Webdienst sowohl von Visual Basic 6.0 als auch von Visual Basic .NET aus zugreifen. Außerdem haben Sie erfahren, was erforderlich ist, um eine vorhandene SOAP-Anwendung für die .NET-Plattform zu konvertieren.

Dabei sind folgende wichtige Punkte festzuhalten:

  • Zur Beschreibung der SOAP-Dokumente, die an einen Webdienst gesendet werden können, wird eine WSDL-Datei verwendet. In Visual Basic 6.0 können Sie den WSDL-Generator des SOAP Toolkits verwenden, um diese Datei zu erstellen. In Visual Studio .NET wird die Datei automatisch erstellt.

  • Bei der Erstellung eines Webdienstes in Visual Basic 6.0 ist eine Microsoft WSML-Datei und eine separate ASP-Listenerseite erforderlich. Keine der beiden ist notwendig, wenn Sie einen ASP.NET-Webdienst in Visual Studio .NET erstellen.

  • Clients und Dienste lassen sich unabhängig von der Plattform beliebig kombinieren. Sie können einen Visual Basic .NET-Dienst entweder von einem Visual Basic 6.0-Client oder von einer ASP-Seite unter Verwendung von SoapClient aufrufen. Schließlich kann Ihr Visual Basic 6.0-Webdienst mit SoapServer Anforderungen von Visual Studio .NET-Clients verarbeiten.

 

Informant Communications Group

Informant Communications Group (www.informat.com) ist ein breitgefächertes Medienunternehmen, das auf den Informationstechnologiesektor ausgerichtet ist. ICG wurde 1990 gegründet und ist spezialisiert auf Softwareentwicklungspublikationen, Konferenzen, Katalogveröffentlichungen und Websites. ICG besitzt Niederlassungen in den USA und Großbritannien und hat sich als zuverlässiger Integrator für Marketing- und Medieninhalte erwiesen, der die wachsende Nachfrage von IT-Spezialisten nach qualitativ hochwertigen technischen Informationen abdeckt.