Ho creato un progetto di libreria di servizi WCF nella mia soluzione e ho riferimenti a questo servizio. Uso i servizi di una libreria di classi, quindi ho riferimenti dal mio progetto di applicazione WPF oltre alla libreria di classi. I servizi vengono configurati in modo semplice, modificati solo per ottenere funzioni di servizio asincrone.
Tutto funzionava bene, fino a quando non ho voluto aggiornare i miei riferimenti di servizio. Non è riuscito, quindi alla fine sono tornato indietro e ho riprovato, ma non è riuscito anche allora! Quindi, l'aggiornamento dei riferimenti al servizio non riesce senza apportare alcuna modifica. Perché?!
L'errore che ricevo è questo:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
L'avviso fornisce ulteriori informazioni:
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']
Ci sono anche due avvisi simili che dicono:
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']
E lo stesso per:
Custom tool warning: Cannot import wsdl:port ..
Trovo tutto questo confuso .. Non ho una classe paziente sul dashboard lato client tranne quella che ho ottenuto tramite il riferimento del servizio. Quindi cosa vuol dire? E perché all'improvviso si vede? Ricorda: non ho nemmeno cambiato nulla!
Ora, la soluzione a questo è stata trovata qui , ma senza una spiegazione di cosa significhi. Così; in "Configura riferimento servizio" per il servizio deseleziono la casella di controllo "Riutilizza i tipi negli assembly di riferimento". Ricostruire ora funziona tutto bene senza problemi. Ma cosa ho veramente cambiato? Ciò avrà un impatto sulla mia domanda? E quando si dovrebbe deselezionare questo? Voglio riutilizzare i tipi su cui ho impostato DataContract, ma non di più. Avrò ancora accesso a quelli senza questa verifica?