Ich habe in meiner Lösung ein WCF-Servicebibliotheksprojekt erstellt und habe Service-Verweise darauf. Ich verwende die Dienste aus einer Klassenbibliothek, daher habe ich zusätzlich zur Klassenbibliothek Referenzen aus meinem WPF-Anwendungsprojekt. Dienste werden einfach eingerichtet - nur geändert, um asynchrone Dienstfunktionen zu erhalten.
Alles hat gut funktioniert - bis ich meine Servicereferenzen aktualisieren wollte. Es ist fehlgeschlagen, also habe ich mich irgendwann zurückgerollt und es erneut versucht, aber es ist auch dann fehlgeschlagen! Das Aktualisieren der Dienstreferenzen schlägt fehl, ohne dass Änderungen daran vorgenommen werden. Warum?!
Der Fehler, den ich bekomme, ist folgender:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Die Warnung enthält weitere Informationen:
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']
Es gibt auch zwei ähnliche Warnungen:
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']
Und das Gleiche für:
Custom tool warning: Cannot import wsdl:port ..
Ich finde das alles verwirrend. Ich habe keine Patientenklasse auf dem clientseitigen Dashboard außer der, die ich über die Servicereferenz erhalten habe. Was bedeutet das? Und warum zeigt es sich plötzlich? Denken Sie daran: Ich habe nicht einmal etwas geändert!
Nun wurde die Lösung für dieses Problem gefunden hier , aber ohne eine Erklärung zu dem, was das bedeutet. So; Deaktivieren Sie im Kontrollkästchen "Dienstreferenz konfigurieren" für den Dienst das Kontrollkästchen "Wiederverwendungstypen in den referenzierten Assemblys". Der Wiederaufbau funktioniert jetzt problemlos. Aber was habe ich wirklich geändert? Wird sich dies auf meine Bewerbung auswirken? Und wann sollte man das deaktivieren? Ich möchte die Typen, für die ich DataContract eingerichtet habe, wiederverwenden, aber nicht mehr. Bekomme ich trotzdem Zugriff auf diese, ohne dass dies überprüft wurde?