¿Visual Studio 2008 usa SvcUtil.exe y si "No" tiene alguna desventaja al usar svcutil?
visual-studio-2008 wcf (5)
Diría que Visual Studio 2008 usa svcutil para generar código proxy.
Como prueba, simplemente use Visual Studio para generar código de proxy y abra el archivo Reference.cs (suponiendo que se haya generado en C #), este encabezado estará en el archivo:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3053
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Ahora, use la línea de comando svcutil para generar el código proxy. Abra el archivo generado, y verá exactamente el mismo encabezado.
Además, cuando mira las opciones disponibles en Visual Studio 2008 cuando agrega una referencia de servicio, cada opción corresponde a un argumento svcutil.
Después de googlear un poco, no hay una respuesta definitiva sobre si Visual Studio 2008 usa svcutil.exe o no. Visual Studio 2005 sí lo usó, pero ¿las versiones RTM de Visual Studio 2008 usan svcutil? Algunos blogs dicen que no (y lo hacen parecer sorprendente)
- SVCUtil y VS2008
- Comando svcutil.exe equivalente para VS2008 Agregar referencia de servicio
- SVCUtil Generar cliente WCF y el problema es campo especificado
y otros sitios dicen que sí.
La razón por la que estoy preguntando es que estamos preparando WCF wsdl con una extensión de comportamiento de endpoint personalizada (una implementación de IWsdlExportExtension / IEndpointBehavior) y usando el wsdl aplanado a través de Agregar Referencia de Visual Studio 2008 nos da errores de compilación ya que está duplicando Types / Classes. La referencia se agrega sin ningún error. SvcUtil, por otro lado, lanza la clase duplicada a un espacio de nombres separado que soluciona el problema de compilación.
Así que SvcUtil funciona, pero Visual Studio 2008 no funciona en algunos de nuestros wsdls aplanados. Estamos de acuerdo con continuar usando svcutil si la Referencia de Agregar Servicios en Visual Studio no funciona, pero nos preguntamos si alguien sabe si hay alguna implicación al hacerlo. No pude encontrar ninguna evidencia de que "no debería" estar usando svcutil, solo que no es tan fácil como usar Add Service Reference en Visual Studio 2008.
Nunca he visto ninguna razón para creer que Visual Studio llame a svcutil.exe o wsdl.exe. En ambos casos, las aplicaciones de consola y Visual Studio usan el mismo código de Framework .NET para hacer su trabajo.
Tenga en cuenta que algunos errores que se producen durante el comando "Agregar referencia de servicio" aparecen en la ventana "Errores" de Visual Studio y no en la ventana Resultados. Es necesario llamar a una API de Visual Studio para colocar mensajes en la ventana Errores, lo que svcutil.exe no pudo hacer.
Prefiero decir que Visual Studio 2008 no está usando svcutil.exe. Bueno, al menos no directamente.
Utilicé Process Monitor para ver qué aplicaciones se ejecutan en mi máquina al agregar una nueva referencia de servicio a mi proyecto y no pude encontrar "svcutil" en el registro.
svcutil y VS2008 finalmente llaman al mismo bit de código WCF. Si utiliza el ejecutable real o las llamadas a un dll es un detalle menor. En todo caso, prefiero la herramienta de línea de comandos, ya que permite más flexibilidad (o tal vez solo me gusta la línea de comando ;-p).
Tenga en cuenta que WCF puede reutilizar los tipos existentes, tanto a través del IDE como desde la línea de comandos (/ r?). Pero este tipo de problema de espacio de nombres es solo una de las muchas cosas que prefiero sobre el uso de la versión de línea de comandos.
Esta es una vieja pregunta y surgió cuando estaba buscando algo similar, así que mencionaré lo que encontré.
Esta publicación de blog afirma que VS2008 no usa svcutil para generar proxies. Estoy de acuerdo con él, ya que svcutil no aparece en la lista de procesos del administrador de tareas cuando agrega una referencia de servicio. También producen resultados notablemente diferentes: por ejemplo, svcutil no produce proxies listos para el consumo en una aplicación de Silverlight, tienes que recortar una cantidad razonable de ellos (como interfaces o referencias a objetos que no están disponibles en los ensamblajes). que Silverlight puede usar *).
Aún así, no es difícil escribir una pequeña aplicación que llame a svcutil para hacer el trabajo duro y luego hacer una limpieza en los archivos generados.
* Es posible evitar este problema especificando una versión de marco diferente con el /targetClientVersion
pero todavía no lo he intentado.