Tengo una solución de servicio de Windows y estoy tratando de agregar una referencia de servicio a un servicio web Hermes (Opensource ebms message server) en VS2010.
Puedo encontrar el servicio web usando su URL, pero cuando intento completar la referencia del servicio, obtengo los siguientes errores en Visual Studio:
Error 8 Custom tool error: Failed to generate code for the service reference 'testService'. Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 6 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://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Algunas investigaciones parecen sugerir que se debe a que svcutil.exe no ha podido construir los servidores proxy debido a que no tiene permisos para un directorio (posiblemente c: \ windows \ temp). He intentado asignar varios permisos de acceso, pero no estoy realmente seguro de qué usuario necesita el permiso, o si es solo una pista falsa.
Cualquier idea sería muy apreciada.
Gracias
fuente
Haga clic derecho en su referencia de servicio y elija
Configure Service Reference...
Luego desmarque
Reuse types in referenced assemblies
Haga clic
OK
, limpie y reconstruya su solución.fuente
También encontré un error similar al intentar generar el cliente para un servicio web desde un proyecto ASP .Net MVC 4.0 usando Visual Studio 2012.
La raíz del problema parece ser el hecho de que el proyecto desde el que intentaba generar el cliente hacía referencia a un ensamblaje que a su vez dependía de otro ensamblaje al que no se hacía referencia también.
Cuando "Reutilizar tipos en conjuntos referenciados" está habilitado en la configuración del servicio, el generador de servicios probablemente esté inspeccionando todos los conjuntos referenciados para obtener una lista de tipos que pueden reutilizarse. El hecho de que uno de los conjuntos a los que se hace referencia haga referencia a otro conjunto que no está disponible probablemente esté causando el fallo del generador.
Desmarcar "Reutilizar tipos en conjuntos referenciados" de las configuraciones de servicio resolverá el problema anterior , pero hay un efecto secundario. La opción de reutilizar tipos está ahí por una razón y, en algunos casos, evita la conversión innecesaria en el código que consume el servicio.
Por ejemplo, si el servicio en sí se construye usando WCF y algunos parámetros de métodos dentro de él son del tipo System.Guid, se traducirán a cadenas en el cliente generado si la opción de reutilizar tipos está deshabilitada.
Una alternativa que prefiero deshabilitar los tipos de reutilización es agregar la referencia de servicio del proyecto Biblioteca de clases creado específicamente para ese propósito. Lo único que debe tener en cuenta es copiar todas las configuraciones relacionadas con el servicio de la aplicación app.config de la biblioteca de clases al archivo de configuración del proyecto de inicio.
Si hay tipos definidos en ensamblajes locales que deben reutilizarse en el cliente de servicio, simplemente es necesario hacer referencia a esos ensamblados del proyecto de biblioteca de clases mencionado anteriormente, junto con todas sus dependencias.
fuente
http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647
Gracias al artículo anterior.
En mi caso, tengo este problema con mi proyecto WPF en VS.Net 2008. Después de leer este artículo, me di cuenta de que el ensamblaje utilizado en el servicio web es una versión diferente del ensamblado utilizado en el cliente.
Funciona bien después de actualizar el ensamblado en el cliente.
fuente
Sería extremadamente difícil adivinar el problema ya que se debe a un error en el WSDL y sin examinar el WSDL, no puedo comentar mucho más. Entonces, si puede compartir su WSDL, hágalo.
Todo lo que puedo decir es que parece que falta un esquema en el WSDL (con el espacio de nombres de destino 'http://service.ebms.edi.cecid.hku.hk/'). Sé acerca de los problemas y el manejo diferente del esquema cuando se ignoran las instrucciones de inclusión.
En general, he encontrado que la implementación de servicios web de Microsoft es bastante buena, así que creo que el servicio web está enviando un WSDL poco fiable.
fuente
Me sale el mismo error en Silverlight 5 (VS2012)
También puede eliminar las referencias a:
Después de actualizar las referencias de servicio, asegúrese de agregarlas nuevamente.
fuente
Como se indicó anteriormente, hay un par de posibles problemas diferentes. Lo que encontramos es que el .DLL para la biblioteca WCF se había agregado como referencia al proyecto del cliente. Esto, a su vez, creó problemas para resolver los objetos y, por lo tanto, provocó que los archivos se "vaciaran" mediante pasos de generación de código. Si bien desmarcar el uso "Reutilizar tipos ..." puede parecer una respuesta, crea definiciones adicionales de los tipos de objeto, que son representantes de los tipos reales, en un nuevo espacio de nombres, lo que provoca todo tipo de problemas de "compatibilidad" con El uso de esos tipos. Solo si realmente desea "ocultar" un tipo, debe marcar esta opción.
Ocultar el tipo sería apropiado cuando no desea que una dependencia de tipo "DLL" se "filtre" en un proyecto que está tratando de mantener separado de otro. Si la DLL para el proyecto de la biblioteca WCF se desliza en las referencias del proyecto del cliente, entonces tendrá este problema con todo tipo de efectos secundarios extraños ya que las definiciones de tipo también están en la DLL.
fuente
enfrentar el mismo problema, resuelto ejecutando Visual Studio en modo Administrador
fuente
He encontrado este problema al actualizar una solución VS2010 WCF + Silverlight en VS2015 Professional . Además de actualizar automáticamente de Silverlight 4 a Silverlight 5, el valor de la casilla de verificación de reutilización de referencia de servicio cambió y la generación falló.
fuente
"Reutilizar tipos" no siempre es el problema cuando se produce este error.
Al agregar una referencia a un servicio anterior, haga clic en 'avanzado' y allí 'Agregar referencia web'. Ahora enlace a su wsdl y todo debería estar funcionando.
fuente
Si desea corregir esto sin desmarcar la casilla de verificación de reutilización de ensamblaje, esto es lo que funcionó para mí:
fuente
Reiniciar Visual Studio hizo el truco para mí. Estoy usando VS 2015.
fuente
Tuve este problema al intentar actualizar mi referencia de servicio (aunque el error solo aparece al agregar una referencia de servicio) pero no quería eliminar la casilla de verificación de reutilización del ensamblaje.
Lo que funcionó para mí fue lo siguiente:
Voila, ahora se actualiza y ya no intenta eliminar todo mi código generado.
Estaba casi listo para renunciar a la función de tipos de reutilización ...
EDITAR: también asegúrese de que la configuración de compilación sea AnyCPU o x86, ya que svcutil tiene errores con x64.
Para el votante: lo siento si no funcionó para ti, ni siquiera sé por qué funcionó para mí, pero lo hizo. Es posible que haya hecho algo más esa vez que solucionó el problema, pero no hay forma de saberlo ahora.
fuente