Générer Code C# du Service Web SOAP
Cet exemple illustre comment générer un service Web SOAP avec MapForce. Vous allez générer un code de programme C# depuis un projet échantillon MapForce disponible sous le chemin suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\Query Person database.mfp. Ce projet met en place un service Web SOAP qui permet d'exposer deux opérations : getPerson et putPerson. Ce service Web communique en arrière-plan avec une base de données SQLite pour extraire ou ajouter des détails de personne, respectivement, par le biais des opérations ci-dessus. Pour consulter un exemple de la création de ce type de projets dans MapForce, voir Créer des projets de service Web à partir de fichiers WSDL.
Cet exemple utilise Visual Studio 2015 pour compiler le code C# généré. La solution sera déployée sur Internet Information Services (IIS) 10 et ASP.NET est activé.
Pour une plus grande simplicité, cet exemple utilise une configuration de serveur Web de base et n'est pas obligatoire. Dans un environnement de production, vous pouvez souhaiter utiliser une autre approche que celle exigée par les spécifications de votre serveur Web, les polices de sécurité dans votre entreprise et d'autres facteurs.
Pour appeler le service Web SOAP, cet exemple utilise XMLSpy Enterprise Edition. Si vous ne disposez pas de XMLSpy, il faudra qu'un client SOAP testera le service Web, ou, en alternative, écrire un code de programme qui peut appeler le service Web. Vous pouvez également tester le service Web en créant un appel de service Web dans MapForce.
Note : | Si vous utilisez IIS 7.x, vous devrez tout d'abord installer la fonction Windows "IIS Metabase and IIS 6 configuration compatibility". |
Étape 1: Préparer le fichier query.wsdl
Ce service Web exemple provient du fichier WSDL suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\query.wsdl. Par défaut, le fichier query.wsdl définit les détails de service pour C# et Java dans deux sections séparées, dont une est décommentée. C'est pourquoi, avant de générer du code C#, localiser la section suivante dans le fichier query.wsdl et assurez-vous qu'il n'est pas décommenté :
<service name="WS2DB"> |
De même, veuillez vous assurer que la section suivante (uniquement applicable à Java) est décommentée :
<!--<service name="WS2DB"> |
Étape 2: Générer du code C# et le créer
Exécuter MapForce et ouvrir le projet "Query Person database.mfp" depuis le dossier <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\. Cliquer avec la touche de droite sur le projet dans la fenêtre Projet et choisir Générer du code dans | C#. MapForce génère un code de programma et affiche le résultat dans la fenêtre de Messages :
Par défaut, le code sera généré dans un sous-répertoire appelé "output", et relatif au répertoire du projet. En ce qui concerne notre tutoriel, nous allons laisser les paramètres par défaut tels qu'ils sont. Néanmoins, si vous souhaitez changer le répertoire de sortie, voir Définir les paramètres de génération de code.
Exécuter Visual Studio et ouvrir la solution générée.
Vous devrez éventuellement exécuter Visual Studio en tant qu'administrateur. De plus, cette solution d'exemple doit être compilée en tant qu'application de 32-bit, comme indiqué ci-dessous. |
•Vous pouvez créer la solution comme suit :
Étape 3: Déployer le service Web sur IIS
Dans la fenêtre Solution Explorer de Visual Studio, cliquer avec la touche de droite sur le projet services-Site/WS2DB et choisir "Publish Web App" depuis le menu de contenu.
Vous serez invité à choisir une cible de publication, choisir alors "Custom".
Vous serez ensuite invité à saisir une valeur qui sera facile à reconnaître ultérieurement, par exemple "iis".
Choisir "File System" en tant que méthode de publication et choisir un dossier de destination (dans cet exemple, "C:\WS2DB").
Cliquer sur Next. Laisser les paramètres par défaut tels qu'ils sont.
Cliquer sur Next, puis cliquer sur Publish.
La fenêtre de Sortie affiche le résultat.
Étape 4: Configurer l'application dans IIS Manager
Vous pouvez ajouter la nouvelle application à IIS comme suit :
1.Dans IIS, cliquer avec la touche de droite sur Sites | Default Web Site et choisir Add Application depuis le menu contextuel.
2.Sous "Alias name", saisir un nom pour identifier votre application web ("services", dans cet exemple).
3.Sous "Physical path", saisir le chemin où l'application a été publiée précédemment ("C:\WS2DB", dans cet exemple).
De plus, pour cet exemple particulier, il est nécessaire que les applications 32-bit soient activées pour le pool dans lequel l'appli est exécutée.
1.Dans IIS, cliquer avec la touche de droite sur le pool d'application dans lequel l'appli a été déployée et choisir Advanced Settings dans le menu contextuel.
2.Sous Enable 32-bit Applications, choisir l'option True.
Enfin, puisque cet exemple lit des données depuis une base de données SQLite, le pool d'application IIS doit avoir les permissions d'accéder au fichier de base de données. À moins que vous ayez modifié le projet MapForce, la base de données est disponible sous le chemin suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\people.sqlite.
1.Dans Windows Explorer, cliquer avec la touche de droite sur le fichier people.sqlite et choisir Properties.
2.Dans l'onglet Security, cliquer sur Edit.
3.Cliquer sur Add et saisir le nom d'objet comme suit : IIS AppPool\DefaultAppPool. Changer "DefaultAppPool" en une valeur différente si vous avez déployé l'appli dans un autre pool que le pool par défaut.
4.Accordez les permissions requises et cliquer sur Apply. (Dans cet exemple, la permission de lire et d'écrire dans le fichier de la base de données est nécessaire.)
Afin de tester si le service Web est en cours d'exécution, accéder à l'URL suivante : http://localhost/WS2DB.
Si les détails du service Web sont chargés dans le navigateur, vous pouvez passer à l'appel du service Web depuis une application client, comme indiqué ci-dessous.
Appeler le service Web
Si vous avez suivi les étapes ci-dessus littéralement, le WSDL du service Web est disponible sous http://localhost/WS2DB/query.wsdl. Pour appeler le service Web service que nous venons de déployer, nous allons utiliser XMLSpy, bien que vous puissiez également utiliser d'autres clients SOAP.
Note : | Il est recommandé d'accéder au véritable WSDL sous http://localhost/WS2DB/query.wsdl au lieu d'utiliser la méthode de requête "?wsdl". Ce dernier peut retourner un fichier WSDL dans lequel certaines fonctions manque par rapport à l'original ou une fonction qui ne fonctionne pas du tout. |
Exécuter XMLSpy Enterprise Edition. Dans le menu SOAP, cliquer sur Create New SOAP Request. Sur invitation, saisir le WSDL du service Web (dans cet exemple, http://localhost/WS2DB/query.wsdl).
Cliquer sur OK. Sur invitation, choisir une Opération SOAP, choisir getPerson.
XMLSpy génère une requête d'échantillon comme celui ci-dessous.
<?xml version="1.0" encoding="UTF-8"?> |
Localiser l'élément <Query> de la requête, et remplacer "String" avec la valeur que vous souhaitez fournir en tant qu'entrée dans le service Web. Comme indiqué auparavant, ce service Web extrait des détails personnels depuis une base de données SQLite. En ce qui concerne notre exemple, pour que l'appel puisse réellement extraire des données, "String" doit être remplacé avec "Ro" (autrement dit, seules les personnes dont le prénom ou le nom de famille contient "Ro" seront extraites). La nouvelle requête ressemble maintenant à l'élément suivant :
<?xml version="1.0" encoding="UTF-8"?> |
Vous pouvez maintenant envoyer la requête ci-dessus au serveur. Dans le menu SOAP, cliquer sur Send Request to Server. La fenêtre Paramètres de Requête SOAP s'ouvre.
Cliquer sur OK. XMLSpy initie l'appel et retourne la réponse dans l'éditeur. L'image ci-dessous illustre une réponse réussie.
En utilisant la même approche que décrite ci-dessus, vous pouvez aussi appeler l'opération putPerson exposée par ce service Web. Pour des instructions étape par étape, voir la section "Appeler le service Web" dans le tutoriel Java. Seule l'URL WSDL est différente dans le tutoriel Java ; toutes les autres instructions pour appeler le service Web sont identiques.
Dépannage
La table suivante recense les problèmes les plus courants pouvant survenir lors de la création ou l'invocation du service Web et leurs solutions.
Problème | Solution |
---|---|
L'appel du service Web retourne l'erreur suivante :
The <...> provider is not registered on the local machine." | 1.Créer la solution C# dans Visual Studio en tant qu'application 32-bit. 2.Déployer sur IIS. 3.Cliquer avec la touche de droite sur le pool d'application IIS dans lequel vous avez déployé l'application, et choisir Advanced Settings. 4.Sous Enable 32-bit applications, choisir True. |
L'appel du service Web retourne l'erreur suivante :
The <...> database engine cannot open the file '<path>\people.sqlite'. It is already opened exclusively by another user, or you need permission to view its data. | •Accorder au pool d'application IIS la permission de lire le fichier de base de données Access, voir "Étape 4: Configurer l'application dans IIS Manager" ci-dessus. |
L'appel du service Web retourne l'erreur suivante :
Operation must use an updateable query. | •Accorder au pool d'application IIS la permission de rédiger le fichier de base de données, voir "Étape 4: Configurer l'application dans IIS Manager" ci-dessus. |