2010-09-02 11 views
7

Estoy intentando usar svcutil.exe para generar -sólo- los contratos de servicio (interfaces) de un conjunto de archivos .wsdl. Cuando hago esto (desde un wsdl alojado en http), recoge los esquemas incluidos y genera todo el código para ellos.¿Por qué no funciona la opción/reference para svcutil.exe?

Genial.

Lo que yo realmente gustaría hacer, sin embargo, es el uso de un conjunto de clases ya generados a partir de los archivos de esquema utilizando la herramienta xsd.exe (las razones de esto no son importantes, basta con decir que yo necesita tener los tipos en un ensamblaje, y el servicio se contrae en otro). Logré generar un ensamblaje que contenía todos los tipos.

El problema ocurre cuando intento hacer que svcutil.exe use los tipos en ese ensamblado. Mi línea de comandos es como la siguiente:

svcutil /target:code /noconfig /reference:my_types.dll http://path/to/wsdl 

Esto funciona bien, pero el código generado contiene duplicados de todos los tipos en el archivo my_types.dll. Según la documentación de svcutil.exe, entiendo que este es el problema exacto que el parámetro/reference debe superar. En mi caso, sin embargo, no está funcionando.

¿Por qué?

Respuesta

5

Aparentemente solo funciona para los tipos de DataContract y no para los tipos de XmlSerializer.

http://blogs.msdn.com/b/youssefm/archive/2009/10/09/reusing-types-in-referenced-assemblies-with-svcutil-s-r-switch.aspx

+0

Eso parece ser exactamente el motivo. Desearía que hubiera entrado en más detalles sobre por qué existe esta limitación, ¡pero gracias por la respuesta, no obstante! – Mark

+0

¿Ha intentado ejecutar manualmente WSDL.exe contra su WSDL para generar una clase de proxy. Elimine las clases que genera y luego agregue las referencias a sus clases. – Andrew

1

he tenido este problema. Algo en un binario que estaba haciendo referencia con/r todavía se estaba construyendo de nuevo en el código generado. Uno de los objetos devueltos por una de las funciones de servicio era devolver una tabla de datos u otra cosa horrible como esa. Agregué un/r a la ruta completa a System.Data y eso lo solucionó.

/r: "C: \ Archivos de programa (x86) \ Referencia Asambleas \ Microsoft \ Framework.NETFramework \ v4.5.2 \ System.Data.dll"

Cuestiones relacionadas