Creé un proyecto de biblioteca de servicios WCF en mi solución y tengo referencias de servicio a esto. Utilizo los servicios de una biblioteca de clases, por lo que tengo referencias de mi proyecto de aplicación WPF además de la biblioteca de clases. Los servicios se configuran directamente, solo se modifican para obtener funciones de servicio asíncronas.
Todo funcionaba bien, hasta que quise actualizar mis referencias de servicio. Falló, así que finalmente retrocedí y volví a intentarlo, ¡pero falló incluso entonces! Entonces, la actualización de las referencias del servicio falla sin realizar ningún cambio. ¡¿Por qué?!
El error que obtengo es este:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
La advertencia brinda más información:
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']
También hay dos advertencias similares que dicen:
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']
Y lo mismo para:
Custom tool warning: Cannot import wsdl:port ..
Encuentro todo esto confuso ... No tengo una clase Paciente en el Panel del lado del cliente, excepto la que obtuve a través de la referencia de servicio. Así que, ¿qué significa? ¿Y por qué aparece de repente? Recuerda: ¡ni siquiera cambié nada!
Ahora, la solución a esto se encontró aquí , pero sin una explicación de lo que esto significa. Entonces; en "Configurar referencia de servicio" para el servicio desmarco la casilla de verificación "Reutilizar tipos en los ensamblajes referenciados". Reconstruir ahora todo funciona bien sin problemas. ¿Pero qué cambié realmente? ¿Esto tendrá un impacto en mi solicitud? ¿Y cuándo se debe desmarcar esto? Quiero reutilizar los tipos en los que configuré DataContract, pero no más. ¿Seguiré teniendo acceso a los que no lo hayan marcado?