Beispiel: Generieren von SOAP-Webservices (C#)

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Implementieren von SOAP-Webservices >

Beispiel: Generieren von SOAP-Webservices (C#)

In diesem Beispiel wird gezeigt, wie Sie mit MapForce einen SOAP-Webservice generieren. Sie werden anhand des MapForce-Beispielprojekts unter <Dokumente>\Altova\MapForce2019\MapForceExamples\\Query Person database.mfp C#-Programmcode generieren. In diesem Projekt ist ein SOAP-Webservice implementiert, der zwei Operationen bereitstellt: getPerson und putPerson. Dieser Webservice kommuniziert im Hintergrund mit einer Microsoft Access-Datenbank, um über die obigen Operationen Personendaten abzurufen bzw. hinzuzufügen. Ein Beispiel zum Erstellen solcher Projekte in MapForce finden Sie unter Erstellen von SOAP-Webservice-Projekten anhand von WSDL-Dateien.

 

In diesem Beispiel wird C#-Code mit Hilfe von Visual Studio 2015 kompiliert. Die Lösung wird auf Internet Information Services (IIS) 10 bereitgestellt, wobei ASP.NET aktiviert ist.

 

In diesem Beispiel wird aus Gründen der Einfachheit eine Webserver-Minimalkonfiguration verwendet. In einer Produktionsumgebung müssen Sie unter Umständen abhängig von Webserver, Sicherheitsvorgaben und anderen Faktoren eine andere Konfiguration verwenden.

 

In diesem Beispiel wird zum Aufrufen des SOAP-Webservice die XMLSpy Enterprise Edition verwendet. Wenn Sie XMLSpy nicht installiert haben, benötigen Sie einen SOAP-Client, um den Webservice zu testen oder müssen Programmcode schreiben, der den Webservice aufrufen kann.

 

Anmerkung:Wenn Sie Visual Studio 2008 und IIS 7.x verwenden, müssen Sie eventuell zuerst die Windows-Funktionalität "Kompatibilität mit IIS-Metabasis und IIS 6-Konfiguration" installieren.

 

Schritt 1: Vorbereiten der query.wsdl-Datei

Dieser Beispiel-Webservice stammt aus der folgenden WSDL-Datei: <Dokumente>\Altova\MapForce2019\MapForceExamples\query.wsdl. Standardmäßig sind die Service-Details in der Datei query.wsdl für C# und Java in zwei separaten Abschnitten definiert, von denen einer auskommentiert ist. Bevor Sie daher C#-Code generieren, gehen Sie zum folgenden Abschnitt in der Datei query.wsdl und stellen Sie sicher, dass dieser nicht auskommentiert ist:

 

  <service name="WS2DB">
    <port name="WS2DBSoapPort" binding="tns:WS2DBSoapBinding">
        <soap:address location="http://localhost/WS2DB/WS2DB.asmx"/>
    </port>
  </service>

 

Stellen Sie außerdem sicher, dass der folgende Abschnitt (der nur für Java gilt) auskommentiert ist:

 

  <!--<service name="WS2DB">
     <port name="WS2DBSoapPort" binding="tns:WS2DBSoapBinding">
        <soap:address location="http://localhost:8080/axis/services/WS2DB"/>
     </port>
  </service>-->

 

 

Schritt 2: Generieren und Erzeugen von C#-Code

Starten Sie MapForce und öffnen Sie das Projekt "Query Person database.mfp" aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\. Klicken Sie mit der rechten Maustaste im Projektfenster auf das Projekt und wählen Sie den Befehl Code generieren in | C#. MapForce generiert daraufhin Programmcode und zeigt das Ergebnis im Fenster "Meldungen" an:

mff_soap_cs_ex02

 

Code wird standardmäßig relativ zum Projektverzeichnis in einem Unterverzeichnis mit dem Namen "output" generiert. In diesem Tutorial behalten wir die Standardeinstellung unverändert bei. Wie Sie das Ausgabeverzeichnis ändern können, ist unter Definieren der Codegenerierungseinstellungen erläutert.

 

Starten Sie Visual Studio und öffnen Sie die generierte Lösung. Warten Sie, bis alle Projekte in der Projektmappe geladen wurden.

 

Eventuell müssen Sie Visual Studio als Administrator ausführen. Diese Beispiellösung muss außerdem, wie unten gezeigt, als 32-Bit-Applikation kompiliert werden.

 

Sie können die Projektmappe folgendermaßen erstellen:

 

Klicken Sie im Menü Build auf Projektmappe erstellen (Strg+Umschalt+B).

 

Beachten Sie, dass in diesem Beispiel eine Microsoft Access-Datenbank mit Hilfe des ADO-Providers für Access abgefragt wird. Dieser Provider funktioniert nur mit 32-Bit-Applikationen. Die Projektmappe muss daher folgendermaßen als 32-Bit-Applikation kompiliert werden:

 

Klicken Sie im Menü Build auf Konfigurations-Manager, erstellen Sie eine neue Projektmappenplattform für x86 und erstellen Sie den Build erneut.

mff_soap_cs_solution_platform

 

Schritt 3: Bereitstellen des Webservice auf IIS

Klicken Sie mit der rechten Maustaste im Projektmappenfenster von Visual Studio auf das Projekt services-Site/WS2DB und wählen Sie im Kontextmenü den Befehl "Web-App veröffentlichen".

mff_soap_cs_ex03

 

Wenn Sie aufgefordert werden, ein Ziel auszuwählen, klicken Sie auf "Benutzerdefiniert".

mff_soap_cs_ex04

 

Wenn Sie aufgefordert werden, einen Profilnamen einzugeben, geben Sie einen Wert ein, den Sie später leicht erkennen, z.B. "iis".

mff_soap_cs_ex05

 

Wählen Sie als Veröffentlichungsmethode "Dateisystem" aus und wählen Sie einen Zielordner (in diesem Beispiel "C:\WS2DB") aus.

mff_soap_cs_ex06

 

Klicken Sie auf Weiter. Behalten Sie die Standardeinstellungen unverändert bei.

mff_soap_cs_ex07

 

Klicken Sie auf Weiter und anschließend auf Veröffentlichen.

mff_soap_cs_ex08

 

Im Ausgabefenster wird das Ergebnis angezeigt.

mff_soap_cs_ex09

 

 

Schritt 4: Konfigurieren der Applikation im IIS Manager

Sie können die neue Applikation folgendermaßen zu IIS hinzufügen:

 

1.Klicken Sie mit der rechten Maustaste in IIS auf Sites | Standardwebsite und wählen Sie im Kontextmenü Anwendung hinzufügen.
2.Geben Sie unter "Alias-Name" einen Namen zum Identifizieren Ihrer Web-Applikation ein (in diesem Beispiel "services").
3.Geben Sie unter "Physischer Pfad" den Pfad, unter dem die Applikation zuvor veröffentlicht wurde, ein (in diesem Beispiel "C:\WS2DB").

mff_soap_cs_ex10

 

Zusätzlich dazu müssen für dieses Beispiel im Pool, in dem die App ausgeführt wird, 32-Bit-Applikationen aktiviert werden.

 

1.Klicken Sie in IIS mit der rechten Maustaste auf den Applikationspool, in dem die App bereitgestellt wurde, und wählen Sie im Kontextmenü Erweiterte Einstellungen.
2.Aktivieren Sie unter 32-Bit-Anwendungen aktivieren die Option Wahr.

mff_soap_cs_iis_pool

 

Da in diesem Beispiel Daten aus einer Microsoft Access-Datenbank gelesen werden, muss der IIS-Applikationspool außerdem Zugriffsrechte auf die Datenbankdatei haben. Wenn Sie das MapForce-Projekt nicht geändert haben, befindet sich die Datenbank unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2019\MapForceExamples\people.mdb.

 

1.Klicken Sie in Windows Explorer mit der rechten Maustaste auf die Datei people.mdb und wählen Sie Eigenschaften.
2.Klicken Sie auf dem Register Sicherheit auf Bearbeiten.
3.Klicken Sie auf Hinzufügen und geben Sie den folgenden Objektnamen ein: IIS AppPool\DefaultAppPool. Ändern Sie "DefaultAppPool" in einen anderen Wert, wenn Sie die App in einem anderen Pool als dem Standardpool bereitgestellt haben.
4.Räumen Sie die benötigten Rechte ein und klicken Sie auf Anwenden. (In diesem Beispiel werden für die Datenbankdatei Lese- und Schreibrechte benötigt.)

mff_soap_cs_pool_permission

 

Um zu testen, ob der Webservice hochgeladen wurde und läuft, rufen Sie die folgende URL auf: http://localhost/WS2DB.

mff_soap_cs_ex11

 

Wenn die Webservice-Informationen im Browser geladen werden, können Sie fortfahren und den Webservice über eine Client-Applikation, wie unten gezeigt, aufrufen.

 

Aufrufen des Webservice

Wenn Sie die obige Anleitung genau befolgt haben, steht der Webservice unter http://localhost/WS2DB/query.wsdl zur Verfügung. Wir verwenden zum Aufrufen des soeben bereitgestellten Webservice XMLSpy. Sie können natürlich auch andere SOAP-Clients dafür verwenden.

 

Starten Sie XMLSpy (Enterprise Edition). Klicken Sie im Menü SOAP auf Neuen SOAP-Request erzeugen. Geben Sie die WSDL-Datei des Webservice ein, wenn Sie dazu aufgefordert werden (in diesem Beispiel http://localhost/WS2DB/query.wsdl).

mff_soap_cs_ex12

 

Klicken Sie auf OK. Wenn Sie aufgefordert werden, eine SOAP-Operation auszuwählen, wählen Sie die Operation getPerson aus.

mff_soap_cs_ex13

 

XMLSpy generiert daraufhin einen Request wie den unten gezeigten.

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
    <getPerson SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <Query xsi:type="xsd:string">String</Query>
    </getPerson>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Suchen Sie das Element <Query> des Request und ersetzen Sie "String" durch den Wert, der als Input für den Webservice fungieren soll. Wie bereits erwähnt ruft dieser Webservice Personendaten aus einer Access-Datenbank ab. Damit durch den Aufruf in diesem Beispiel Daten abgerufen werden, wird "String" durch "Ro" ersetzt (d.h. nur Personen, deren Vor- oder Nachname "Ro" enthält, würden abgerufen). Der neue Request sieht folgendermaßen aus:

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
    <getPerson SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <Query xsi:type="xsd:string">Ro</Query>
    </getPerson>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Sie können den obigen Request nun an den Server senden. Klicken Sie im Menü SOAP auf Request an Server senden. Daraufhin wird das Dialogfeld "SOAP Request-Einstellungen" angezeigt.

mff_soap_cs_ex14

 

Klicken Sie auf OK. XMLSpy startet den Aufruf und zeigt im Editor die Antwort an. In der Abbildung unten sehen Sie eine erfolgreiche Antwort.

mff_soap_cs_ex15

Auf dieselbe oben beschriebene Art können Sie auch die von diesem Webservice bereitgestellte putPerson aufrufen. Eine schrittweise Anleitung dazu finden Sie im Java-Tutorial im Abschnitt "Aufrufen des Webservice". Im Java-Tutorial ist nur die WSDL URL eine andere; alle anderen Anleitungen zum Aufrufen des Webservice sind gleich.

 

Fehlerbehebung

In der folgenden Tabelle sind häufige Probleme beschrieben, die beim Erzeugen oder Aufrufen von Webservices auftreten können. Daneben finden Sie eine Lösung dafür.

 

Problem

Lösung

Beim Aufruf des Webservice wird der folgende Fehler zurückgegeben:

 

Der 'Microsoft.Jet.OLEDB.4.0' Provider ist auf dem lokalen Rechner nicht registriert."

1.Erstellen Sie die C#-Projektmappe in Visual Studio als 32-Bit-Applikation.
2.Stellen Sie sie auf IIS bereit.
3.Klicken Sie mit der rechten Maustaste auf den IIS-Applikationspool, in dem Sie die Applikation bereitgestellt haben und wählen Sie Erweiterte Einstellungen.
4.Aktivieren Sie unter 32-Bit-Anwendung aktivieren die Einstellung Wahr.

Beim Aufruf des Webservice wird der folgende Fehler zurückgegeben:

 

Der Microsoft Jet Datenbankprozessor kann die Datei 'C:\Users\<user>\Documents\Altova\MapForce2019\MapForceExamples\Tutorial\people.mdb' nicht öffnen. Sie wurde bereits von einem anderen Benutzer exklusiv geöffnet oder Sie benötigen eine Berechtigung, um ihre Daten anzuzeigen.

Räumen Sie dem IIS-Applikationspool Leserechte für die Access-Datenbankdatei ein, siehe "Schritt 4: Konfigurieren der Applikation im IIS Manager" oben.

Beim Aufruf des Webservice wird der folgende Fehler zurückgegeben:

 

System.Data.OleDb.OleDbException: Operation muss eine aktualisierbare Abfrage verwenden.

Räumen Sie dem IIS-Applikationspool Schreibrechte für die Access-Datenbankdatei ein, siehe "Schritt 4: Konfigurieren der Applikation im IIS Manager" oben.

© 2019 Altova GmbH