J'ai créé un projet de bibliothèque de services WCF dans ma solution et j'ai des références de service à ce sujet. J'utilise les services d'une bibliothèque de classes, j'ai donc des références de mon projet d'application WPF en plus de la bibliothèque de classes. Les services sont configurés simplement - uniquement modifiés pour obtenir les fonctions de service asynchrone.
Tout fonctionnait bien - jusqu'à ce que je veuille mettre à jour mes références de service. Cela a échoué, alors j'ai fini par reculer et réessayer, mais cela a échoué même dans ce cas! Donc, 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'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 aussi deux avertissements similaires 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 la même chose pour:
Custom tool warning: Cannot import wsdl:port ..
Je trouve tout cela déroutant. Je n'ai pas de classe Patient sur le tableau de bord côté client à l'exception de celle que j'ai obtenue via la référence du service. Alors qu'est-ce que ça veut dire? Et pourquoi cela se voit-il soudainement? Souvenez-vous: je n'ai même rien changé!
Maintenant, la solution à cela a été trouvée ici , mais sans explication sur ce que cela signifie. Donc; dans la "Configurer la référence de service" pour le service, je décoche la case "Réutiliser les types dans les assemblys référencés". Reconstruire maintenant tout fonctionne correctement sans problèmes. Mais qu'est-ce que j'ai vraiment changé? Cela aura-t-il un impact sur ma candidature? Et quand doit-on décocher cela? Je souhaite réutiliser les types sur lesquels j'ai configuré DataContract, mais pas plus. Est-ce que j'aurai toujours accès à ceux sans cette vérification?