Outil de compilateur de service web
Pour prendre en charge le modèle de service, wsutil.exe génère un en-tête à utiliser côté client et côté service. Il génère un fichier proxy C pour le côté client et un fichier stub C pour le côté service, selon les besoins.
Pour prendre en charge la sérialisation, le compilateur génère des en-têtes pour les descriptions d’éléments globaux et toutes les informations de définition de type dans le fichier proxy à consommer par le moteur de sérialisation.
Utilisation
WsUtil.exe [commutateurs de ligne de commande [switch-options]:]<filename>
commutateurs de ligne de commande
Spécifie WsUtil.exe options de compilateur. Les commutateurs peuvent apparaître dans n’importe quel ordre. Le tiret ('-') et la barre oblique ('/') sont traités comme les mêmes.
Liste des options de ligne de commande
- @filename Spécifie que le fichier d’entrée doit être traité comme un fichier de réponse. Cette option peut être utilisée plusieurs fois, à n’importe quel emplacement de la liste d’arguments.
- /wsdl:<filename>:<optional_url> Spécifie que le fichier d’entrée doit être traité comme un fichier wsdl. Plusieurs entrées wsdl sont autorisées et tous les fichiers wsdl spécifiés sont traités. Le optional_url spécifie l’emplacement à partir duquel les métadonnées ont été récupérées. Si aucune optional_url n’est spécifiée, Wsutil génère une URL unique en interne. Consultez également Prise en charge des stratégies.
- /xsd:<filename> Spécifie que le nom de fichier d’entrée doit être traité comme un fichier de schéma. Plusieurs entrées xsd sont autorisées et tous les fichiers de schéma spécifiés sont traités.
- /wsp:<filename>:<optional_url> Spécifie que le nom de fichier d’entrée doit être traité comme des métadonnées de stratégie. Plusieurs entrées wsp sont autorisées et tous les fichiers de stratégie spécifiés sont traités. Le optional_url spécifie l’emplacement à partir duquel les métadonnées ont été récupérées. Si aucune optional_url n’est spécifiée, Wsutil génère une URL unique en interne. Les fichiers de stratégie sont ignorés si l’indicateur /nopolicy est spécifié. Consultez également Prise en charge des stratégies.
- /nopolicy Désactiver le traitement des stratégies.
- /out:<dirname> Spécifie le nom du répertoire pour les fichiers de sortie
- /noclient Ne générez pas le stub côté client.
- /noservice Ne générez pas le stub côté service.
- /prefix:<string> Prepend spécifie la chaîne à tous les identificateurs générés.
- /fullname Prepend nom de fichier normalisé pour les identificateurs générés. Par défaut, seul le nom spécifié dans l’attribut « name » est utilisé pour générer des identificateurs pour les descriptions associées.
- /string:<WS_STRING>|< WCHAR*> Par défaut, wsutil génère WCHAR* pour le type xsd:string. L’application peut utiliser cet indicateur pour remplacer ce comportement et génère des WS_STRING pour xsd:type à la place.
- /help Afficher le message d’aide
- /? Identique à /help
- Options de gestion des erreurs /W:x. Peut-être W:0-W:4 | WX
- /nologo Ne générez pas d’informations spécifiques au compilateur sur la sortie de la console.
- /nostamp Ne générez pas d’informations spécifiques au compilateur sur les fichiers générés.
Par défaut, le compilateur génère les fichiers suivants pour le fichier WSDL ou WSDL retournés par l’échange de métadonnées :
Proxy client ({inputfilename}.c)
Stub de service ({inputfilename}.c)
Fichier d’en-tête ({inputfilename}.h)
La racine du nom de fichier généré est le nom du fichier d’entrée. Les extensions de fichier d’entrée d’origine sont conservées pour éviter la collision de nom de fichier pour les fichiers générés. Par défaut, les stubs client et de service sont générés dans le même fichier, avec le code stub de service généré après le code proxy.
Par défaut, le compilateur génère les fichiers suivants pour un fichier XSD pour le schéma retourné à partir de l’échange de métadonnées :
descriptions de sérialisation ({inputfilename}.c)
Fichier d’en-tête ({inputfilename}.h)
La racine du nom de fichier est le nom du service.
Wsutil.exe génère une section « empreinte » au début de tous les fichiers générés, indiquant l’option du compilateur, la version de l’outil, l’option de ligne de commande applicable, etc. Cette section peut être désactivée à l’aide de l’option /nostamp pour éviter le bruit lors de la comparaison des fichiers générés.
Wsutil ne prend pas en charge le téléchargement de métadonnées
Le compilateur Wsutil fonctionne à partir du fichier de métadonnées local uniquement. L’outil ne prend pas en charge le téléchargement de métadonnées à partir de services web en cours d’exécution. Les développeurs peuvent utiliser d’autres outils de service web pris en charge, tels que svcutil, pour télécharger des métadonnées sur un ordinateur local, inspecter les fichiers enregistrés et transmettre ces fichiers à wsutil.exe pour compilation.
Prise en charge de plusieurs fichiers d’entrée/sortie
Le schéma WSDL et XML permet d’inclure/importer des définitions à partir d’autres espaces de noms spécifiés dans d’autres emplacements/fichiers. Wsutil prend en charge plusieurs entrées de schéma/wsdl/stratégie et génère un ensemble de stub/header pour chaque fichier d’entrée. Wsutil ne suit pas les instructions include et import. Au lieu de cela, l’application doit transmettre des fichiers contenant tous les espaces de noms nécessaires à wsutil afin que l’outil puisse résoudre toutes les dépendances pendant la compilation.
WsUtil.exe /xsd:stockquote.xsd /wsdl:stockquote.wsdl /wsdl:stockquoteservice.wsdl
wsutil génère trois ensembles de fichiers de sortie :
- stockquote.xsd.c stockquote.xsd.h
- stockquote.wsdl.c stockquote.wsdl.h
- stockquoteservice.wsdl.h stockquoteservices.wsdl.c
Format des fichiers de sortie
Pour chaque fichier de sortie, wsutil génère des définitions disponibles en externe dans le fichier d’en-tête. Outre les définitions de structure C et les prototypes de fonction stub, toutes les autres définitions liées aux services web sont encapsulées dans une structure globale nommée avec un nom de fichier normalisé.
typedef struct _stockquote_wsdl {
struct {
... // list of WS_STRUCT_DESCRIPTION for all global complex types.
} globalTypes;
struct {
... // WS_ELEMENT_DESCRIPTION for all global elements.
} globalElements;
struct {
...
} messages;
struct {
...
} contracts;
} _stockquote_wsdl;
EXTERN_C _stockquote_wsdl stockquote_wsdl;
Notez que tous les champs ne sont pas générés pour la structure globale. Un champ de niveau supérieur est généré uniquement lorsque les définitions associées sont spécifiées dans le fichier d’entrée. Par exemple, aucun champ de message, d’opération et de contrat n’est généré pour les fichiers xsd.
Niveaux d’avertissement et niveau d’erreur
Comme pour le compilateur C, WsUtil.exe prend en charge quatre niveaux d’avertissement et un niveau d’erreur :
- WsUtil.exe génère des erreurs avec des échecs irrécupérables, comme un fichier wsdl non valide, des options de compilateur non valides, etc.
- WsUtil génère des avertissements W1 avec des problèmes graves récupérables. Le compilateur peut continuer, mais l’utilisateur doit être conscient du problème. Par exemple, un avertissement W1 est généré s’il existe des attributs non pris en charge, comme certaines facettes WSDL, dans wsdl qui n’affectent pas la génération de code.
- WsUtil génère des avertissements W2 avec des problèmes moins graves. Il n’y a pas de perte de fonctionnalités, mais le développeur d’applications peut vouloir le savoir. Comme des comportements qui peuvent être différents des autres plateformes.
- WsUtil génère des avertissements W3 avec un impact minimal sur le code généré. Par exemple, wsutil.exe génère un avertissement W3 lorsque la chaîne normalisée est différente de la chaîne d’origine.
- L’avertissement W4 ressemble davantage aux avertissements « informationnels », et WsUtil émet W4 dans des cas tels que l’ignorance de l’attribut de documentation dans WSDL.
- WX indique que le compilateur traite l’avertissement comme une erreur. Par exemple, wsutil génère une erreur pour tous les avertissements W1 si /W:1 /WX est spécifié.
/W:{N} spécifiez le niveau de message d’avertissement à générer. /W:1 signifie que les avertissements de niveau d’avertissement 1 doivent être générés, et que les avertissements des niveaux d’avertissement 2 et inférieurs doivent être masqués et non générés par l’outil.
Cette option indique que WsUtil.exe génère le nom complet des identificateurs afin d’éviter toute collision de noms. Par exemple, dans example.xsd, nous avons :
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Example.org"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://Example.org"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:element name="SimpleStruct">
<xs:complexType>
<xs:sequence>
<xs:element name="a" type="xs:int" />
<xs:element name="b" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</wsdl:types>
</wsdl:definitions>
Par défaut, WsUtil.exe génère :
typedef struct SimpleStruct {
int a;
int b;
};
Mais si l’option de ligne de commande /fullname est spécifiée, WsUtil.exe génère à la place la définition de structure suivante :
typedef struct exmaple_xsd_SimpleStruct {
int a;
int b;
};
L’outil est indépendant de la langue et peut être localisé dans différentes langues. Tous les messages d’erreur/sortie de la console peuvent être localisés. Toutefois, les options de ligne de commande restent en anglais.
WsUtil.exe n’utilise aucune variable d’environnement.
Les fichiers de sortie de WsUtil.exe sont indépendants de la plateforme. Il n’existe aucun code dépendant de l’architecture généré dans le stub ; Tout ce qui est spécifique à l’architecture sera pris en charge par le compilateur C. Le stub peut être utilisé dans toutes les plateformes que nous prenons en charge.
La description de wsutil.exe sortie est disponible dans la section Prise en charge de WSDL et prise en charge du schéma .