Outil Service Model Metadata Tool (Svcutil.exe)
L'outil Service Model Metadata Tool est utilisé pour générer un code de modèle de service à partir de documents de métadonnées, ainsi que des documents de métadonnées à partir d'un code de modèle de service.
Notes
L'outil Service Model Metadata Tool se trouve à l'emplacement d'installation du Kit de développement logiciel Windows, généralement C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin
Le tableau suivant résume les différentes fonctionnalités fournies par cet outil et la rubrique correspondante qui décrit leur utilisation.
Tâche | Rubrique |
---|---|
Génère le code à partir des services en cours d'exécution ou de documents de métadonnées statiques. |
|
Exporte des documents de métadonnées à partir de code compilé. |
How to: Use Svcutil.exe to Export Metadata from Compiled Service Code |
Valide le code de service compilé. |
|
Télécharge des documents de métadonnées à partir de services en cours d'exécution. |
|
Génère du code de sérialisation. |
Attention : |
---|
Svcutil remplace les fichiers existants d'un disque si les noms qui ont été fournis en tant que paramètres sont identiques. Cela peut inclure des fichiers de code, des fichiers de configuration ou de métadonnées. Pour éviter cela, lorsque vous générez du code et des fichiers de configuration, utilisez le commutateur /mergeConfig. De plus, les commutateurs /r et /ct utilisés pour référencer des types sont destinés à la génération de contrats de données. Ces commutateurs ne fonctionnent pas lors de l'utilisation de XmlSerializer. |
Cet outil est soumis à un délai d'attente de 5 minutes lors de la récupération de métadonnées. Ce délai d'attente s'applique uniquement à la récupération des métadonnées sur le réseau. Il ne s'applique pas au traitement de ces métadonnées.
Lorsque vous utilisez Svcutil pour accéder à un document WSDL qui contient une référence à un service d'émission de jeton de sécurité (STS), Svcutil effectue un appel WS-MetadataExchange call au STS. Cependant, le service peut exposer ses documents WSDL à l'aide de WS-MetadataExchange ou de HTTP GET. Par conséquent, si le STS n'a exposé que le document WSDL à l'aide de HTTP GET, un client écrit dans .NET Framework 3.0 échoue. Pour les clients écrits dans .NET Framework 3.5, Svcutil tente d'utiliser WS-MetadataExchange et HTTP GET pour obtenir le STS WSDL.
Utilisations courantes
Le tableau suivant illustre certaines des options fréquemment utilisées pour cet outil.
Option | Description |
---|---|
/directory:<répertoire> |
Répertoire à utiliser pour la création des fichiers. Valeur par défaut : le répertoire actif. Forme abrégée : /d |
/help |
Affiche la syntaxe de commande et les options de l'outil. Forme abrégée : /? |
/noLogo |
Supprime le message de copyright et de bannière. |
/svcutilConfig:<fichier_config> |
Spécifie un fichier de configuration personnalisé à utiliser en remplacement du fichier App.config. Peut être utilisé pour enregistrer des extensions system.serviceModel sans modifier le fichier de configuration de l'outil. |
/target:<type_sortie> |
Spécifie la sortie à générer par l'outil. Les valeurs valides sont code, métadonnées ou xmlSerializer. Forme abrégée : /t |
Génération de code
Svcutil.exe peut générer du code pour les contrats de service, les clients et les types de données à partir de documents de métadonnées. Ces documents de métadonnées peuvent se trouver sur un stockage durable, ou encore être récupérés en ligne. La récupération en ligne suit le protocole WS-Metadata Exchange ou le protocole DISCO (pour plus d'informations, consultez la section consacrée au téléchargement de métadonnées).
Pour un service avec un point de terminaison BasicHttpContextbinding, Svcutil.exe génère un BasicHttpBinding avec l'attribut allowCookies affecté à la place de la valeur true. Les cookies sont utilisés pour le contexte sur le serveur. Pour gérer le contexte sur le client lorsque le service utiliser des cookies, vous pouvez modifier manuellement la configuration pour utiliser une liaison de contexte.
Attention : |
---|
Svcutil.exe génère le client sur la base du WSDL ou du fichier de stratégie reçu du service. Le nom d'utilisateur principal (UPN) est généré en concaténant le nom d'utilisateur, « @ » et un nom de domaine complet. Toutefois, ce format n'est pas valide pour les utilisateurs Active Directory, et l'UPN généré par l'outil provoque une défaillance dans l'authentification Kerberos et l'affichage du message d'erreur suivant : La tentative d'ouverture de session a échoué. Pour remédier à cela, vous devez corriger manuellement le fichier client généré par cet outil. |
svcutil.exe [/t:code] <metadataDocumentPath>* | <url>* | <epr>
Argument | Description |
---|---|
epr |
Chemin d'accès à un fichier XML qui contient une référence de point de terminaison WS-Addressing pour un service qui prend en charge WS-Metadata Exchange. Pour plus d'informations, consultez la section consacrée au téléchargement de métadonnées. |
metadataDocumentPath |
Chemin d'accès à un document de métadonnées (wsdl ou xsd) qui contient le contrat à importer dans le code (.wsdl, .xsd, .wspolicy ou .wsmex). Svcutil effectue des imports et des opérations d'inclusion lorsque vous spécifiez une URL distante pour les métadonnées. Toutefois, si vous souhaitez traiter des fichiers de métadonnées sur le système de fichiers local, vous devez spécifier tous les fichiers dans cet argument. De cette façon, vous pouvez utiliser Svcutil dans un environnement de génération dans lequel vous ne pouvez pas avoir de dépendances de réseau. Vous pouvez utiliser des caractères génériques (par exemple, * .xsd, * .wsdl) pour cet argument. |
url |
URL à un point de terminaison de service qui fournit les métadonnées ou à un document de métadonnées hébergé en ligne. Pour plus d'informations sur la façon dont ces documents sont récupérés, consultez la section consacrée au téléchargement de métadonnées. |
Option | Description |
---|---|
/async |
Génère à la fois des signatures de méthode synchrones et asynchrones. Valeur par défaut : génération de signatures de méthode synchrones uniquement. Forme abrégée : /a |
/collectionType:<type> |
Spécifie un nom qualifié complet ou qualifié d'assembly de type à utiliser comme type de données de collection, lorsque du code est généré à partir de schémas. Forme abrégée : /ct |
/config:<fichier_config> |
Spécifie le nom de fichier du fichier de configuration généré. Valeur par défaut : output.config. |
/dataContractOnly |
Génère du code pour les types de contrat de données uniquement. Aucun type de contrat de service n'est généré. Pour cette option, vous devez spécifier uniquement des fichiers de métadonnées locaux. Forme abrégée : /dconly |
/enableDataBinding |
Implémente l'interface INotifyPropertyChanged sur tous les types de contrat de données pour activer la liaison de données. Forme abrégée : /edb |
/excludeType:<type> |
Spécifie un nom de type qualifié complet ou qualifié d'assembly à exclure des types de contrat référencés. Lors de l'utilisation de ce commutateur avec /r à partir de DLL séparées, le nom complet de la classe XSD est référencé. Forme abrégée : /et |
/importXmlTypes |
Configure le sérialiseur de contrat de données de façon à importer des types autres que le type de contrat de données en tant que types IXmlSerializable. |
/internal |
Génère des classes marquées comme internes. Valeur par défaut : génération de classes publiques uniquement. Forme abrégée : /i |
/language:<langage> |
Spécifie le langage de programmation à utiliser pour la génération de code. Vous devez spécifier un nom de langage enregistré dans le fichier Machine.config, ou le nom qualifié complet d'une classe qui hérite de CodeDomProvider. Valeurs: c#, cs, csharp, vb, visualbasic, c++, cpp Valeur par défaut : csharp Forme abrégée : /l
Remarque :
Le commutateur prend en charge C++ uniquement pour le fournisseur de code fourni avec Visual Studio 2005 SP1.
|
/mergeConfig |
Fusionne la configuration générée dans un fichier existant au lieu de remplacer le fichier existant. |
/messageContract |
Génère des types de contrat de message. Forme abrégée : /mc |
/namespace:<chaîne, chaîne> |
Spécifie un mappage d'un espace de noms WSDL ou XML Schema targetNamespace vers un espace de noms CLR. L'utilisation de '*' pour l'espace de noms targetNamespace mappe tous les espaces de noms targetNamespaces sans mappage explicite à cet espace de noms CLR. Pour vérifier que le nom de contrat du message n'entre pas en collision avec le nom d'opération, vous devez soit qualifier la référence de type avec ::, soit vous assurer que les noms sont uniques. Valeur par défaut : dérivée de l'espace de noms cible du document de schéma pour les contrats de données. L'espace de noms par défaut est utilisé pour tous les autres types générés. Forme abrégée : /n |
/noConfig |
Ne génère pas de fichiers de configuration. |
/noStdLib |
Ne référence pas les bibliothèques standard. Valeur par défaut: Mscorlib.dll et System.servicemodel.dll sont référencés. |
/out:<fichier> |
Spécifie le nom de fichier du code généré. Valeur par défaut: dérivée du nom de définition WSDL, du nom de service WSDL ou de l'espace de noms cible de l'un des schémas. Forme abrégée : /o |
/serializable |
Génère des classes marquées avec l'attribut Serializable. Forme abrégée : /s |
/targetClientVersion |
Spécifie la version de .NET Framework ciblée par l'application. Les valeurs valides sont Version30 et Version35. La valeur par défaut est Version30, ce qui signifie que l'outil SvcUtil.exe vise .NET Framework 3.0 par défaut. Forme abrégée : /tcv Version30 : Utilisez Version35 : Utilisez |
/reference:<chemin_accès> |
Référence les types contenus dans l'assembly spécifié. Lorsque vous générez des clients, utilisez cette option pour spécifier des assemblys qui peuvent contenir des types représentant les métadonnées importées. Vous ne pouvez pas spécifier de contrats de message et de types XmlSerializer à l'aide de ce commutateur. Si DateTimeOffset est référencé, ce type est utilisé au lieu de générer un nouveau type. Si l'application est écrite à l'aide de .NET Framework 3.5, SvcUtil.exe référence automatiquement DateTimeOffset. Forme abrégée : /r |
/serializer:Auto |
Sélectionne automatiquement le sérialiseur. Utilise le sérialiseur de contrat de données. Si cela échoue, le XmlSerializer est utilisé. Forme abrégée : /ser:Auto |
/serializer:DataContractSerializer |
Génère des types de données qui utilisent le sérialiseur de contrat de données pour la sérialisation et la désérialisation. Forme abrégée : /ser:DataContractSerializer |
/serializer:XmlSerializer |
Génère des types de données qui utilisent le XmlSerializer pour la sérialisation et la désérialisation. Forme abrégée : /ser:XmlSerializer |
Remarque : |
---|
Lorsque la liaison de service est l'une des liaisons fournies par le système (consultez System-Provided Bindings), et la propriété ProtectionLevel a la valeur None ou Sign, Svcutil génère un fichier de configuration à l'aide de l'élément <customBinding> au lieu de l'élément fourni par le système attendu. Par exemple, si le service utilise l'élément <wsHttpBinding> avec le ProtectionLevel définissez à Sign, la configuration générée a <customBinding> dans la section de liaisons au lieu de <wsHttpBinding>. Pour plus d'informations sur le niveau de protection, consultez Understanding Protection Level. |
Exportation de métadonnées
Svcutil.exe peut exporter des métadonnées pour des services, des contrats et des types de données contenus dans des assemblys compilés. Pour exporter des métadonnées pour un service, vous devez utiliser l'option /serviceName afin de spécifier le service à exporter. Pour exporter tous les types de contrat de données dans un assembly, vous devez utiliser l'option /dataContractOnly. Par défaut, les métadonnées sont exportées pour tous les contrats de service dans les assemblys d'entrée.
svcutil.exe [/t:metadata] [/serviceName:<serviceConfigName>] [/dataContractOnly] <assemblyPath>*
Argument | Description |
---|---|
assemblyPath |
Spécifie le chemin d'accès à un assembly qui contient des services, des contrats ou des types de contrat de données à exporter. Des caractères génériques de ligne de la commande standard peuvent être utilisés pour fournir plusieurs fichiers en tant qu'entrée. |
Option | Description |
---|---|
/serviceName:<nom_config_service> |
Spécifie le nom de configuration d'un service à exporter. Si cette option est utilisée, un assembly exécutable avec un fichier de configuration associé doit être passé en tant qu'entrée. Svcutil.exe recherche tous les fichiers de configuration associés la configuration du service. Si les fichiers de configuration contiennent des types d'extension, les assemblys qui contiennent ces types doivent être dans le GAC ou être explicitement fournis à l'aide de l'option /reference. |
/reference:<chemin_accès> |
Ajoute l'assembly spécifié au jeu d'assemblys utilisé pour résoudre des références de type. Si vous exportez ou validez un service qui utilise des extensions tierces (Comportements, Liaisons et BindingElements) enregistrées dans la configuration, utilisez cette option pour localiser des assemblys d'extension qui ne figurent pas dans le GAC. Forme abrégée : /r |
/dataContractOnly |
Fonctionne uniquement sur les types de contrat de données. Les contrats de service ne sont pas traités. Pour cette option, vous devez spécifier uniquement des fichiers de métadonnées locaux. Forme abrégée : /dconly |
/excludeType:<type> |
Spécifie le nom qualifié complet ou qualifié d'assembly d'un type à exclure de l'exportation. Cette option peut être utilisée lors de l'exportation des métadonnées d'un service (ou d'un ensemble de contrats de services) afin d'exclure certains types de l'opération d'exportation. Cette option ne peut pas être utilisée avec l'option /dconly. Lorsqu'un assembly contient plusieurs services et que chacun d'entre eux utilise des classes séparées tout en portant le même nom XSD, vous devez spécifier le nom du service au lieu du nom de classe XSD pour ce commutateur. Les types XSD ou les types de contrat de données ne sont pas pris en charge. Forme abrégée : /et |
Validation de service
La validation peut être utilisée pour détecter des erreurs dans les implémentations de service sans héberger le service. Vous devez utiliser l'option /serviceName pour indiquer le service à valider.
svcutil.exe /validate /serviceName:<serviceConfigName> <assemblyPath>*
Argument | Description |
---|---|
assemblyPath |
Spécifie le chemin d'accès à un assembly qui contient des types de service à valider. L'assembly doit posséder un fichier de configuration associé pour pouvoir fournir la configuration du service. Vous pouvez utiliser des caractères génériques de ligne de commande standard pour fournir plusieurs assemblys. |
Option | Description |
---|---|
/validate |
Valide une implémentation de service spécifiée par l'option /serviceName. Si cette option est utilisée, un assembly exécutable avec un fichier de configuration associé doit être passé en tant qu'entrée. Forme abrégée : /v |
/serviceName:<nom_config_service> |
Spécifie le nom de configuration d'un service à valider. Svcutil.exe recherche tous les fichiers de configuration associés de tous les assemblys d'entrée pour la configuration du service. Si les fichiers de configuration contiennent des types d'extension, les assemblys qui contiennent ces types doivent être dans le GAC ou être explicitement fournis à l'aide de l'option /reference. |
/reference:<chemin_accès> |
Ajoute l'assembly spécifié au jeu d'assemblys utilisé pour résoudre des références de type. Si vous exportez ou validez un service qui utilise des extensions tierces (Comportements, Liaisons et BindingElements) enregistrées dans la configuration, utilisez cette option pour localiser des assemblys d'extension qui ne figurent pas dans le GAC. Forme abrégée : /r |
/dataContractOnly |
Fonctionne uniquement sur les types de contrat de données. Les contrats de service ne sont pas traités. Pour cette option, vous devez spécifier uniquement des fichiers de métadonnées locaux. Forme abrégée : /dconly |
/excludeType:<type> |
Spécifie le nom qualifié complet ou qualifié d'assembly d'un type à exclure de la validation. Forme abrégée : /et |
Téléchargement de métadonnées
Svcutil.exe permet de télécharger des métadonnées à partir de services en cours d'exécution et de les enregistrer dans des fichiers locaux. Pour pouvoir télécharger des métadonnées, vous devez spécifier l'option /t:metadata. Sinon, un code client est généré. Pour les schémas d'URL HTTP et HTTPS, Svcutil.exe essaie de récupérer les métadonnées à l'aide de WS-Metadata Exchange et DISCO. Pour tous les autres schémas d'URL, Svcutil.exe utilise uniquement WS-MetadataExchange.
Svcutil publie les requêtes de métadonnées suivantes tout en effectuant simultanément une récupération de métadonnées.
- Requête MEX (WS-Transfer) à l'adresse fournie
- Requête MEX à l'adresse fournie avec /mex ajouté
- Requête DISCO (à l'aide du DiscoveryClientProtocol d'ASMX) à l'adresse fournie.
Par défaut, Svcutil.exe utilise les liaisons définies dans la classe MetadataExchangeBindings pour effectuer des requêtes MEX. Pour configurer la liaison utilisée pour WS-Metadata Exchange, vous devez définir un point de terminaison client dans la configuration qui utilise le contrat IMetadataExchange. Cela peut être défini soit dans le fichier de configuration de Svcutil.exe, soit dans un autre fichier de configuration spécifié à l'aide de l'option /svcutilConfig.
svcutil.exe /t:metadata <url>* | <epr>
Argument | Description |
---|---|
url |
URL d'accès à un point de terminaison de service qui fournit les métadonnées ou à un document de métadonnées hébergé en ligne. |
epr |
Chemin d'accès à un fichier XML qui contient une référence de point de terminaison WS-Addressing pour un service qui prend en charge WS-Metadata Exchange. |
Génération de type XmlSerializer
Les applications clientes et de services qui utilisent des types de données sérialisables à l'aide de XmlSerializer génèrent et compilent le code de sérialisation de ces types de données lors de l'exécution, ce qui peut provoquer des performances de démarrage lentes.
Remarque : |
---|
Le code de sérialisation prégénéré est réservé aux applications clientes, pas aux services. |
Svcutil.exe peut améliorer les performances de démarrage de ces applications en générant le code de sérialisation C# nécessaire à partir des assemblys compilés pour l'application. Pour plus d'informations, consultez How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer.
Remarque : |
---|
Svcutil.exe génère uniquement le code des types utilisés par les contrats de service figurant dans les assemblys d'entrée. |
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument | Description |
---|---|
assemblyPath |
Spécifie le chemin d'accès à un assembly qui contient des types de contrat de service. Des types de sérialisation sont générés pour tous les types Xml sérialisables de chaque contrat. |
Option | Description |
---|---|
/reference:<chemin_accès> |
Ajoute l'assembly spécifié au jeu d'assemblys utilisé pour résoudre des références de type. Forme abrégée : /r |
/excludeType:<type> |
Spécifie le nom qualifié complet ou qualifié d'assembly d'un type à exclure de l'exportation ou de la validation. Forme abrégée : /et |
/out:<fichier> |
Spécifie le nom de fichier du code généré. Cette option est ignorée lorsque plusieurs assemblys sont passés à l'outil en tant qu'entrée. Valeur par défaut : dérivée du nom de l'assembly. Forme abrégée : /o |
/UseSerializerForFaults |
Spécifie que XmlSerializer doit être utilisé pour lire et écrire les erreurs, au lieu du DataContractSerializer par défaut. |
Exemples
La commande suivante génère un code client à partir d'un service en cours d'exécution ou de documents de métadonnées en ligne.
svcutil http://service/metadataEndpoint
La commande suivante génère un code client à partir de documents de métadonnées locaux.
svcutil *.wsdl *.xsd /language:C#
La commande suivante génère des types de contrat de données en Visual Basic à partir de documents de schémas locaux.
svcutil /dconly *.xsd /language:VB
La commande suivante télécharge des documents de métadonnées à partir de services en cours d'exécution.
svcutil /t:metadata http://service/metadataEndpoint
La commande suivante génère des documents de métadonnées pour les contrats de service et les types associés d'un assembly.
svcutil myAssembly.dll
La commande suivante génère des documents de métadonnées pour un service, ainsi que tous les contrats de service et types de données associés au sein d'un assembly.
svcutil myServiceHost.exe /serviceName:myServiceName
La commande suivante génère des documents de métadonnées pour les types de données présents dans un assembly.
svcutil myServiceHost.exe /dconly
La commande suivante vérifie l'hébergement de services.
svcutil /validate /serviceName:myServiceName myServiceHost.exe
La commande suivante génère des types de sérialisation pour les types XmlSerializer utilisés par les contrats de service de l'assembly.
svcutil /t:xmlserializer myContractLibrary.exe
Problèmes de sécurité
Vous devez utiliser la liste de contrôle d'accès appropriée pour protéger le dossier d'installation de Svcutil.exe, Svcutil.config, ainsi que les fichiers vers lesquels pointe /svcutilConfig. Cela peut éviter l'enregistrement et l'exécution d'extensions malveillantes.
De plus, minimiser le risque que la sécurité soit compromise, vous ne devez pas ajouter d'extensions non fiables au système, ni avoir recours à des fournisseurs de code non fiables avec Svcutil.exe.
Enfin, vous ne devez pas utiliser l'outil dans la couche intermédiaire de votre application, car cela pourrait provoquer un déni de service pour le processus en cours.
Voir aussi
Référence
DataContractAttribute
DataMemberAttribute
Autres ressources
How To: Create a Windows Communication Foundation Client Class