2010-09-02 8 views
7

J'essaie d'utiliser svcutil.exe pour générer -only- les contrats de service (interfaces) à partir d'un ensemble de fichiers .wsdl. Quand je fais cela (à partir d'un wsdl hébergé sur http), il récupère les schémas inclus et génère tout le code pour eux.Pourquoi l'option/reference de svcutil.exe ne fonctionne-t-elle pas?

Très bien.

Ce que je vraiment voudrais faire, cependant, est d'utiliser un ensemble de classes déjà générées à partir des fichiers de schéma à l'aide de l'outil xsd.exe (les raisons ne sont pas importants, il suffit de dire que je besoin d'avoir les types dans un assemblage, et les contrats de service dans un autre). J'ai réussi à générer un assemblage contenant tous les types.

Le problème se produit lorsque je tente d'obtenir svcutil.exe pour utiliser les types dans cet assembly. Ma ligne de commande ressemble à ceci:

svcutil /target:code /noconfig /reference:my_types.dll http://path/to/wsdl 

Cela fonctionne très bien, mais le code généré contient des doublons de tous les types dans le fichier my_types.dll. Je comprends de la documentation de svcutil.exe que c'est le problème exact que le paramètre/reference: est destiné à surmonter. Dans mon cas, cependant, cela ne fonctionne pas.

Pourquoi?

Répondre

5

Apparemment, cela ne fonctionne que pour les types DataContract et non les types XmlSerializer.

http://blogs.msdn.com/b/youssefm/archive/2009/10/09/reusing-types-in-referenced-assemblies-with-svcutil-s-r-switch.aspx

+0

qui semble être exactement la raison. J'aurais aimé qu'il nous explique plus en détail pourquoi cette limitation existe, mais merci quand même pour la réponse! – Mark

+0

Avez-vous essayé d'exécuter manuellement WSDL.exe sur votre fichier WSDL pour générer une classe proxy. Supprimez les classes qu'il génère puis ajoutez les références à vos classes. – Andrew

1

J'ai eu ce problème. Quelque chose dans un binaire que je référençais avec/r était encore en cours de construction dans le code généré. L'un des objets renvoyés par l'une des fonctions de service renvoyait une donnée datable ou quelque chose d'horrible comme ça. J'ai ajouté un/r au chemin complet de System.Data et cela l'a corrigé.

/r: "C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.2 \ System.Data.dll"