84 votes

Que signifie cette erreur WCF : « avertissement outil personnalisé : impossible d’importer le WSDL : PortType »

J'ai créé un service WCF projet de bibliothèque dans ma solution, et ont des références de service. J'utilise les services d'une bibliothèque de classe, donc j'ai des références de mon application WPF projet, en plus de la bibliothèque de classe. Des Services sont mis en place avant droite - seulement changé d'obtenir async des fonctions de service.

Tout fonctionnait bien, - jusqu'à ce que je voulais mettre à jour mon références de service. Il a échoué, alors finalement, j'ai roulé en arrière et de tentative d'appel, mais il n'a pas même alors! Donc, - mise à jour des références de service échoue sans faire aucune modification. Pourquoi?!

L'erreur que j'obtiens est celui-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 de plus amples informations:

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 trop en disant:

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 de même pour:

Custom tool warning: Cannot import wsdl:port ..

Je trouve cela déroutant.. je n'ai pas un Patient de classe sur le côté client de tableau de bord à l'exception de celui que j'ai eu par le biais du service de référence. Donc, ça veut dire quoi? Et pourquoi est-il soudainement? Rappelez-vous: je n'ai même pas changer quoi que ce soit!

Maintenant, la solution a été trouvée ici, mais sans une explication de ce que cela signifie. De la sorte; dans la section "Configurer le service de référence" pour le service que j'ai décocher la case "Réutilisation des types dans les assemblys référencés" case à cocher. La reconstruction de maintenant, tout fonctionne très bien sans problèmes. Mais qu'ai-je vraiment changer? Cela fera un impact sur ma demande? Et quand décochez cette case? Je ne veux réutiliser les types que j'ai mis en place DataContract sur, mais pas plus. Vais-je encore accès à ces sans cette vérification?

156voto

Dragos Durlut Points 2258

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

Longue histoire courte : J’ai décoché réutiliser les types dans les assemblys de référence dans le menu avancé.


Je ne sais pas si c’est important, mais je ne suis pas en utilisant MVC, mais les Web Forms.

37voto

Shiraz Bhaiji Points 34901

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

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

Il y a beaucoup de choses qui peuvent mal se passer. Nous avons constaté que si l'outil se bloque, il est parfois plus rapide de supprimer le service de référence et de commencer à nouveau.

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

9voto

geck1942 Points 61

J’ai également eu ce problème aujourd'hui. Il m’a fallu une journée entière pour trouver mon erreur. Elle pourra être qu'utile.

Ma classe qui n’ont pas pu être importé a une propriété de type enum cutom. Cette propriété est marquée comme DataMember et l’Enum est également marqué comme DataContract. Tout très bien jusqu'à présent. J’ai juste oublié de marquer chaque membre enum comme EnumMember.

Donc j’ai changé

Pour cela :

Et enfin, cela a fonctionné !

8voto

Allez dans les propriétés avancées lors de l’ajout de référence et de supprimer « System.Window.Browser » de la liste de vérifications, il a résolu le problème.

8voto

user836252 Points 273

qui peut paraître bizarre, mais je l’ai fixé en supprimant les références, puis fermer Visual Studio et rouvrir à nouveau et enfin ajouter les références à nouveau.

Je pense que la chose d’outil personnalisé nécessaire pour être redémarré ou quelque chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X