Que signifie cette erreur WCF: "Custom tool warning: Cannot import wsdl:portType"

j'ai créé un projet de bibliothèque de service WCF dans ma solution, et j'ai des références de service à ce sujet. J'utilise les services d'une bibliothèque de classe, donc j'ai des références de mon projet D'application WPF en plus de la bibliothèque de classe. Les Services sont mis en place directement - seulement modifié pour obtenir des fonctions de service async.

tout fonctionnait bien - jusqu'à ce que je veuille mettre à jour mes références de service. Il a échoué, donc je me suis finalement retourné et rejoué, mais il a échoué même alors! So-la mise à jour des références de service échoue sans y apporter de modifications. Pourquoi?!

l'erreur que j'obtiens est celle-ci:

Custom tool error: Failed to generate code for the service reference 
'MyServiceReference'.  Please check other error and warning messages for details.   

l'avertissement donne plus d'information:

Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: 
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in  
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the 
following types. Only matching types can be valid references: 
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']

il y a deux avertissements similaires disant aussi:

Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']  

et la même chose pour:

Custom tool warning: Cannot import wsdl:port .. 

je trouve tout cela déroutant.. Je n'ai pas un Patient de classe sur le côté client Tableau de bord sauf celui que j'ai trouvé dans la référence de service. Donc, ça veut dire quoi? Et pourquoi est-il soudainement? Rappelez-vous: je n'ai même pas changé quoi que ce soit!

maintenant , la solution à cela a été trouvée ici , mais sans explication à ce que cela signifie. Ainsi, dans la case" configurer la référence de service "pour le service, je décoche la case" types de réutilisation dans les assemblages référencés". Reconstruire maintenant tout fonctionne bien sans problèmes. Mais qu'ai-je vraiment le changement? Cela aura-t-il une incidence sur ma demande? Et quand décochez cette case? Je veux réutiliser les types que j'ai mis en place DataContract on, mais pas plus. Vais-je encore accès à ces sans cette vérification?

81
demandé sur stiank81 2009-12-09 13:05:44

13 réponses

lorsque vous ajoutez une référence de service, il y a deux façons dont les types qui sont utilisés par le service peuvent être manipulés:

  • les types sont stockés dans une dll, et cette dll est référencée à la fois du client et de l'application serveur.
  • les types ne sont pas dans une dll référencée par le client. Dans ce cas, l'outil qui crée la référence de service, créera les types dans les références.cs fichier.

Il y a beaucoup de choses qui peuvent mal tourner. Nous avons constaté que si l'outil tombe en panne, il est parfois plus rapide de supprimer la référence de service et de recommencer.

nous avons cessé d'utiliser la référence de service. Pour les projets où nous avons le contrôle du client et du service, nous utilisons la méthode décrite dans ce screencast .

34
répondu Shiraz Bhaiji 2016-04-27 15:36:46

j'ai trouvé ma réponse ici: http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html

pour faire court: je n'ai pas vérifié types de réutilisation dans les assemblages de référence du menu Avancé .


Je ne sais pas si cela importe, mais je n'utilise pas MVC, mais des formulaires Web.

149
répondu Dragos Durlut 2011-06-03 12:30:29

j'ai aussi eu ce problème Aujourd'hui. Il m'a fallu une journée entière pour trouver mon erreur. Espérons que cela aide.

ma classe qui n'a pas pu être importée a une propriété de type cutomène. Cette propriété est marquée comme DataMember et L'Enum est également marquée comme DataContract. Tout d'amende jusqu'à présent. J'ai juste oublié de marquer chaque membre de l'enum comme membre de L'Enum.

donc j'ai changé

[DataContract]
public enum SortMethodType
{
    Default = 0,
    Popularity = 1,
    ReleaseDate = 2,
    PublishedDate = 3,
    TranslatedTitle = 4,
    OriginalTitle = 5,
    UserRating = 6,
    Duration = 7
}

à ceci:

[DataContract]
public enum SortMethodType
{
    [EnumMember]
    Default = 0,
    [EnumMember]
    Popularity = 1,
    [EnumMember]
    ReleaseDate = 2,
    [EnumMember]
    PublishedDate = 3,
    [EnumMember]
    TranslatedTitle = 4,
    [EnumMember]
    OriginalTitle = 5,
    [EnumMember]
    UserRating = 6,
    [EnumMember]
    Duration = 7
}

et ça a finalement marché!

9
répondu Aurel 2011-05-12 19:30:28

ça peut sembler bizarre, mais je l'ai fait réparer en supprimant les références, puis en fermant Visual Studio, et en la rouvrant à nouveau, et finalement en ajoutant les références à nouveau.

je pense que l'outil personnalisé chose doit être redémarré ou quelque chose.

8
répondu Ateik 2011-12-03 18:24:55

aller aux propriétés avancées tout en ajoutant de référence et supprimer" Système.Fenêtre.Browser " de la liste de contrôle, il résout le problème.

7
répondu Sridhar Subramanian 2010-03-16 18:59:24

Je cours constamment à travers cette erreur alors qu'elle fonctionne sur une autre machine de développeurs. Même si je suis un administrateur complet partout dans ma machine virtuelle, j'ai essayé de fermer Visual Studio, et de ré-ouvrir avec 'Run As Administrator' et ça a fonctionné comme par magie.

bonne chance.

4
répondu Tim Gabrhel 2012-08-22 13:25:47

l'un des inconvénients de la désactivation des 'types de réutilisation dans les assemblages référencés' est qu'elle peut causer des problèmes avec des références ambiguës. Ceci est dû au fait que la référence de service crée à nouveau ces objets dans la référence .le fichier cs, et votre code mettant en œuvre le service peut les référencer à partir de l'espace de noms original.

lorsque ce scénario se produit, je trouve utile de vérifier les "types de réutilisation dans les assemblages référencés spécifiés" , ce qui me permet de choisir ceux avec références ambiguës seulement, ce qui résout la question rapidement de cette façon.

J'espère que ça aidera quelqu'un d'autre.

1
répondu John 2014-02-05 01:40:19

j'ai reçu l'avertissement après avoir mis à niveau ma solution de Visual Studio (VS) 2010 à 2013 et changé le cadre .NET de chaque projet de 4 à 4.5.1. J'ai fermé VS et rouvert et les avertissements ont disparu.

1
répondu Paul Berglund 2016-04-06 16:09:29

mes interfaces du service WCF sont dans un assemblage, l'implémentation est dans un autre et la référence de service est dans un autre assemblage, séparé des clients de la référence de service. J'ai reçu le message d'erreur juste après avoir appliqué le contrat de données à un enum. Après que J'ai appliqué Énummember aux champs de l'enum, la question a résolu.

0
répondu zsolt világos 2011-08-10 22:17:08

si vous doutez que votre service n'ait pas de problèmes (tels que des problèmes avec des enums, ou des classes non-sérialisables comme mentionné par d'autres), alors essayez de créer un nouveau projet avec une nouvelle référence.

j'utilise Silverlight 5 et j'ai essayé de supprimer et de recréer la référence à plusieurs reprises. Le fichier reference.cs est apparu complètement vide à chaque fois et il avait été littéralement des années depuis que je l'avais créé si en essayant de comprendre ce que avait changé dans le service était hors de question.

j'ai remarqué que l'erreur contenait des références à 2.0.5.0. Maintenant, je ne sais même pas si c'est vraiment pertinent pour la version de Silverlight, mais ça m'a fait penser à créer un tout nouveau projet et tout à coup tout a fonctionné.

Avertissement 2 Personnalisée de l'outil avertissement: Impossible d'importer wsdl:portType Détail: exception a été lancée lors de l'exécution D'une extension d'importation WSDL: Système.ServiceModel.Description.Datacontractserializermessagecontractimport Erreur: ne pouvait pas charger le système de fichier ou d'assemblage.Xml, Version=2.0.5.0, Culture=neutre, Publiceytoken=7cec85d7bea7798e ' ou l'un de ses dépendance. Le système ne peut pas trouver le fichier spécifié. XPath to Source d'erreur: / / wsdl:definitions [@targetNamespace="] / WSDL: port Type [@name='IShoppingCart']

0
répondu Simon_Weaver 2013-07-24 00:02:05

je regardais mon projet et j'avais ce même problème. Il s'est avéré être différentes versions de la même DLL sur le WCF vs. site web. Le site Web avait une version plus récente de la DLL et le service faisait référence à une version plus ancienne de la DLL. Une fois qu'ils étaient tous synchronisés, tout fonctionnait bien.

0
répondu CBBSpike 2013-11-21 14:22:39

j'ai connu la même erreur. J'ai lutté pendant presque une journée pour trouver ce qui allait mal. L'indice pour moi était les avertissements que VS lançait. Il essayait de faire une sorte de mapping pour Yahoo.Yui.Compresseur.dll, une bibliothèque que j'ai ajoutée et retirée (parce que j'ai décidé de ne pas l'utiliser) quelques jours avant. C'est choquant parce que la bibliothèque n'était pas là, mais de toute façon il essayait de référence.

enfin, je rends cette dll de la poubelle, et ensuite je pourrais mettre à jour ma référence de service avec succès.

0
répondu cdiaz 2014-03-11 14:17:38

pour n'importe qui ici dans le futur, j'ai eu la même erreur mais causée par des problèmes de version, de deux façons différentes.

j'ai deux services de la WCF et deux applications client qui parlent via les références de service. J'ai mis à jour un paquet nuget des deux côtés et j'ai essayé de mettre à jour la référence de service et j'ai eu cette erreur.

Supprimer n'a pas aidé. "Réutiliser des assemblages" n'est pas souhaité car j'ai besoin de les réutiliser - c'est l'essentiel.

en fin de compte, il y avait deux questions distinctes:

1) le premier numéro, je crois, était un problème de cache de studio visuel. J'ai méticuleusement passé en revue toutes les références et n'ai trouvé aucun problème, mais elle a quand même déclaré qu'elle n'était pas en mesure de trouver la version précédente du dossier. J'ai désinstallé tous les paquets nuget, redémarré visual studio et je les ai réinstallés. La mise à jour de la référence de service a fonctionné.

2) le second problème a été causé par une dépendance question. J'ai mis à jour le paquet nuget des deux côtés et tout semblait correct, mais une dépendance non marquée était désynchronisée. Exemple:

Package Foo v1 références de la Barre de v1. Il est possible de mettre à jour Foo et Bar en v2 indépendamment sans mettre à jour la référence. Si vous installez à la fois Foo et Bar v2, l'outil de référence de service va scanner Foo v2, voir la référence à Bar v1, et échouer parce qu'il ne peut pas trouver l'ancienne version. Ceci n'est signalé correctement que si vous mettez à jour les numéros de version de votre dll pour chaque paquet. Visual Studio et MSBuild n'auront aucun problème pour la construction de l'application, mais la référence de service aura beaucoup de mal à essayer de tout résoudre.

j'espère que cela aidera quelqu'un.

0
répondu TheMightyGherkin 2016-01-15 16:57:27