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?
fuente
Respuestas:
Cuando agrega una referencia de servicio, hay dos formas de manejar los tipos que usa el servicio:
Hay muchas cosas que pueden salir mal. Hemos descubierto que si la herramienta falla, a veces es más rápido eliminar la referencia del servicio y comenzar de nuevo.
Hemos dejado de usar la referencia de servicio. Para proyectos donde tenemos el control del cliente y el servicio, usamos el método descrito en este screencast .
fuente
Encontré mi respuesta aquí: http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html
En pocas palabras: desmarqué Reutilizar tipos en ensamblajes de referencia en el menú Avanzado .
No sé si esto importa, pero no estoy usando MVC, sino Web Forms.
fuente
También tuve este problema hoy. Me tomó un día entero encontrar mi error. Espero eso ayude.
Mi clase que no se pudo importar tiene una propiedad de tipo cutom enum. Esta propiedad está marcada como DataMember y la enumeración también está marcada como DataContract. Todo bien hasta ahora. Simplemente olvidé marcar cada miembro de enumeración como EnumMember.
Así que cambié
[DataContract] public enum SortMethodType { Default = 0, Popularity = 1, ReleaseDate = 2, PublishedDate = 3, TranslatedTitle = 4, OriginalTitle = 5, UserRating = 6, Duration = 7 }
A esto:
[DataContract] public enum SortMethodType { [EnumMember] Default = 0, [EnumMember] Popularity = 1, [EnumMember] ReleaseDate = 2, [EnumMember] PublishedDate = 3, [EnumMember] TranslatedTitle = 4, [EnumMember] OriginalTitle = 5, [EnumMember] UserRating = 6, [EnumMember] Duration = 7 }
¡Y finalmente funcionó!
fuente
Vaya a Propiedades avanzadas mientras agrega la referencia y elimine "System.Window.Browser" de la lista de verificación. Resuelve el problema.
fuente
Eso puede sonar extraño, pero lo solucioné eliminando las referencias, luego cerrando Visual Studio, volviéndolo a abrir y finalmente agregando las referencias nuevamente.
Creo que era necesario reiniciar la herramienta personalizada o algo así.
fuente
Constantemente me encuentro con este error mientras funciona en otra máquina de desarrolladores. Aunque soy un administrador completo en todas partes de mi máquina virtual, intenté cerrar Visual Studio y volver a abrirlo con 'Ejecutar como administrador' y funcionó mágicamente.
Buena suerte.
fuente
Recibí la advertencia después de actualizar mi solución de Visual Studio (VS) 2010 a 2013 y cambiar el .NET Framework de cada proyecto de 4 a 4.5.1. Cerré VS y volví a abrir y las advertencias desaparecieron.
fuente
Una desventaja de desactivar "tipos de reutilización en ensamblajes referenciados" es que puede causar problemas con referencias ambiguas. Esto se debe a que la referencia del servicio crea esos objetos nuevamente en el archivo .cs de referencia, y su código que implementa el servicio puede hacer referencia a ellos desde el espacio de nombres original.
Cuando ocurre este escenario, encuentro útil verificar los 'tipos de reutilización en ensamblajes referenciados especificados', lo que me permite elegir los que solo tienen referencias ambiguas, lo que resuelve el problema rápidamente de esa manera.
Espero que ayude a alguien más.
fuente
Mis interfaces del servicio WCF están en un ensamblado, la implementación está en otro y la referencia del servicio está en otro ensamblado, separado de los clientes de la referencia del servicio. Recibí el mensaje de error justo después de aplicar el DataContract a una enumeración. Después de aplicar EnumMember a los campos de la enumeración, el problema se resolvió.
fuente
Si tiene dudas de que su servicio no tiene ningún problema (como problemas con enumeraciones o clases no serializables mencionadas por otros), intente crear un nuevo proyecto con una nueva referencia.
Estoy usando Silverlight 5 y había intentado eliminar y volver a crear la referencia varias veces. El
reference.cs
archivo aparecía completamente vacío cada vez y habían pasado literalmente años desde que lo había creado, por lo que tratar de averiguar qué había cambiado en el servicio estaba fuera de discusión.Noté que el error contenía referencias a 2.0.5.0. Ahora ni siquiera sé si esto es realmente relevante para la versión de Silverlight, pero me hizo pensar en crear un nuevo proyecto y de repente todo funcionó.
fuente
Estaba revisando mi proyecto y estaba teniendo el mismo problema. Resultó ser versiones diferentes de la misma DLL en WCF frente al sitio web. El sitio web tenía una versión más reciente de la DLL y el servicio hacía referencia a una versión anterior de la DLL. Una vez que estuvieron todos sincronizados, todo funcionó bien.
fuente
Experimenté el mismo error. Luché durante casi un día tratando de averiguar qué estaba pasando. La pista para mí fueron las advertencias que estaba lanzando VS. Estaba tratando de hacer algún tipo de mapeo en Yahoo.Yui.Compressor.dll, una biblioteca que había agregado y eliminado (porque decidí no usarla) un par de días antes. Fue impactante porque la biblioteca no estaba allí, pero de alguna manera estaba tratando de hacer referencia a ella.
Finalmente, restauro este dll de la Papelera y luego pude actualizar mi referencia de servicio con éxito.
fuente
Para cualquiera que esté aquí en el futuro, tuve el mismo error pero causado por problemas de versión, de dos maneras diferentes.
Tengo dos servicios WCF y dos aplicaciones cliente que se comunican a través de las referencias de servicio. Actualicé un paquete nuget en ambos lados e intenté actualizar la referencia del servicio y obtuve este error.
Eliminar no ayudó. No se desea desmarcar "reutilizar ensamblajes", ya que necesito reutilizarlos, ese es el punto.
Al final, hubo dos problemas separados:
1) El primer problema, creo, fue un problema de almacenamiento en caché de Visual Studio. Revisé meticulosamente todas las referencias y no encontré problemas, pero aún así informó que no podía encontrar la versión anterior del archivo. Desinstalé todos los paquetes nuget, reinicié Visual Studio y los reinstalé. La actualización de la referencia del servicio funcionó.
2) El segundo problema fue causado por un problema de dependencia. Actualicé el paquete nuget en ambos lados y todo parecía correcto, pero una dependencia no marcada no estaba sincronizada. Ejemplo:
El paquete Foo v1 hace referencia a la barra v1. Es posible actualizar Foo y Bar a v2 de forma independiente sin actualizar la referencia. Si instala Foo y Bar v2, la herramienta de referencia del servicio escaneará Foo v2, verá la referencia a Bar v1 y fallará porque no puede encontrar la versión anterior. Esto solo se informa correctamente si actualiza los números de versión de su dll para cada paquete. Visual Studio y MSBuild no tendrán problemas para construir la aplicación, pero la referencia del servicio lo pasará fatal tratando de resolver todo.
Espero que esto ayude a alguien.
fuente