servicio - crear web service c# visual studio 2015
Error de referencia de servicio: error al generar código para la referencia de servicio (12)
"Tipos de reutilización" 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.
Tengo una solución de servicio de Windows y estoy tratando de agregar una referencia de servicio a un servicio web de Hermes (servidor de mensajes ebms de Opensource) 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 es debido a que svcutil.exe no ha podido construir los proxys debido a que no tiene permisos para un directorio (posiblemente c: / windows / temp). He intentado asignar varios permisos de acceso, pero no estoy seguro de qué usuario necesita el permiso, o si simplemente es una pista falsa.
Cualquier idea sería muy apreciada.
Gracias
Como se indicó anteriormente, hay un par de problemas diferentes posibles. 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. Aunque desmarcar el uso de "Reutilizar tipos ..." puede parecer una respuesta, crea definiciones adicionales de tipos de objetos, que son aproximaciones a los tipos reales, en un nuevo espacio de nombre, que luego causa 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" "filtre" en un proyecto que está tratando de mantener segregado de otro. Si la DLL para el proyecto de la biblioteca WCF se arrastra 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.
Debe desmarcar los tipos de Reutilización en todos los ensamblados a los que se hace referencia de la opción Configurar referencia de servicio
Haga clic con el botón derecho en su referencia de servicio y seleccione Configure Service Reference...
A continuación, desmarque Reuse types in referenced assemblies
Haga clic en OK
, limpie y reconstruya su solución.
He encontrado este problema al actualizar una solución VS2010 WCF + Silverlight en VS2015 Professional . Además de la actualización automática de Silverlight 4 a Silverlight 5, el valor de la casilla de verificación de reutilización de referencia de servicio se modificó y la generación falló.
Me sale el mismo error en Silverlight 5 (VS2012)
También puede eliminar las referencias a:
- System.ServiceModel.DomainServices.Client
- System.ServiceModel.DomainServices.Client.Web
Después de actualizar las referencias del servicio, asegúrese de volver a agregarlas.
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 haber un esquema que falta en el WSDL (con el espacio de nombres de destino ''http://service.ebms.edi.cecid.hku.hk/''). Sé sobre 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á devolviendo el poco fiable WSDL.
Si quiere corregir esto sin desmarcar la casilla de reutilización del ensamblaje, esto es lo que funcionó para mí:
- Eliminar ensamblaje referenciado que desea reutilizar
- Eliminar toda la carpeta bin del proyecto
- Actualizar la referencia del servicio
- Mantenga "Tipos de reutilización en conjuntos de referencia especificados"
- Agregue referencia al ensamblaje nuevamente para corregir los errores
- Actualizar la referencia del servicio nuevamente
También encontré un error similar al intentar generar el cliente para un servicio web desde un proyecto ASP .Net MVC 4.0 utilizando Visual Studio 2012.
La raíz del problema parece ser el hecho de que el proyecto desde el que estaba tratando de generar el cliente hacía referencia a un ensamblado que, a su vez, dependía de otro ensamblaje al que tampoco se hacía referencia.
Cuando "Tipos de reutilización en ensamblados a los que se hace referencia" está habilitado en la configuración del servicio, el generador de servicio probablemente esté inspeccionando todos los ensamblados a los que se hace referencia para obtener una lista de tipos que pueden reutilizarse. El hecho de que uno de los ensamblados a los que se hace referencia hace referencia a otro ensamblaje que no está disponible probablemente esté causando el error del generador.
Desmarcar "Tipos de reutilización en ensambles a los que se hace referencia" de las configuraciones de servicio resolverá el problema anterior , pero tiene un efecto secundario. La opción de tipos de reutilización 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í está construido usando WCF y algunos parámetros de métodos dentro de él son de tipo System.Guid, se traducirán a cadenas en el cliente generado si la opción de tipos de reutilización está deshabilitada.
Una alternativa que prefiero para deshabilitar los tipos de reutilización es agregar la referencia de servicio del proyecto de Biblioteca de clases específicamente creado para ese fin. Lo único que se debe tener en cuenta es copiar todas las configuraciones relacionadas con el servicio de la aplicación de la biblioteca de la clase app.config en el archivo de configuración del proyecto de inicio.
Si hay tipos definidos en ensamblados locales que necesitan ser reutilizados en el cliente de servicio, simplemente se debe hacer referencia a los ensamblados desde el proyecto de biblioteca de clase mencionado anteriormente, junto con todas sus dependencias.
Tuve este problema al intentar actualizar mi referencia de servicio (sin embargo, el error solo aparece al agregar una referencia de servicio) pero no quise eliminar la casilla de reutilización de ensamblaje.
Lo que funcionó para mí fue lo siguiente:
- Eliminar conjunto referenciado que quería volver a usar
- Actualizar la referencia del servicio
- Mantenga "Tipos de reutilización en conjuntos de referencia especificados"
- Ignora los errores, ¡es porque falta la referencia!
- Agregue referencia al ensamblaje nuevamente para corregir los errores
- Actualizar la referencia del servicio nuevamente
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 ...
enfrentar el mismo problema, resuelto ejecutando Visual Studio en modo Admin
Gracias al articulo anterior
En mi caso, tengo este problema con mi proyecto de WPF en VS.Net 2008. Después de leer este artículo, me estaba dando 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 ensamblaje en el cliente.