2010-01-12 20 views
15

He estado luchando con SvcUtil todo el día, tratando de que genere código útil para algunos Servicios Empresariales IMS (principalmente Servicio de Administración de Grupos, pero hay otros para los que también necesitamos que funcione). Puede encontrar el servicio IMS WSDL está aquí http://www.imsglobal.org/es/index.html.¿Alternativa a SvcUtil.exe?

He llegado a la conclusión de que SvcUtil es una idea secundaria inútil de Microsoft que no es compatible con los estándares WSDL y XSD, incluso de una manera a medias. Es incapaz de generar un servicio WCF que cumpla con los contratos WSDL estándar que IMS usa y funciones al mismo tiempo. A pesar de generar código compilable del siguiente WSDL (http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl), observar el WSDL generado desde el servicio WCF (? Wsdl,? Wsdl = wsdl0,? Xsd = xsd0, etc.) muestra que ninguna de las operaciones existe, y solo una fracción de los tipos que se generaron en el código son realmente reconocidos por WCF. Si trabajamos con el código generado, podemos obtener algo de ese tipo de funciones (estamos usando SoapUI para probar), pero luego ya no se ajusta al contrato, por lo que es inútil para las personas que realmente necesitan llamar a estos servicios.

¿Hay alguna alternativa a SvcUtil? (No sugiera la herramienta integrada "Visualizar referencia de servicio" de Visual Studio, que es tan inútil ya que utiliza el mismo código que SvcUtil.) Necesitamos algo que nos dé un grado de control sobre cómo el código se genera a partir del contrato WSDL, en qué archivos termina cada parte, en qué espacios de nombres termina cada elemento de código, etc. El contrato IMS importa tanto los tipos XSD específicos de los servicios definidos en el WSDL, como los tipos XSD que son comunes a todos los servicios IMS. Necesitamos poder generar diferentes ensamblajes para esos tipos, y hacer referencia a ellos en el código generado (similar a como aparentemente se supone que SvcUtil debe hacerlo ... pero no parece hacer lo que dice su documentación dice que sí en absoluto.)

He sido un gran admirador de WCF hasta ahora. Obviamente, funciona cuando utiliza solo servicios .NET/WCF, pero cada vez que intenta usarlo en un entorno multiplataforma compatible con los estándares, todo se vuelve una mierda.

+1

"cada vez que intenta usarlo en un entorno multiplataforma compatible con los estándares, todo se vuelve una mierda" ... esto realmente no debería ser una sorpresa ... – skaffman

+0

@skaffman: Excepto que se suponía que era el objetivo principal de los nuevos y mejorados estándares WSDL, SOAP, XSD y WS- * de WCF. – jrista

+0

¿Para construir un comportamiento de servicio para "adaptar" su generación de WSDL es una opción? Puede ver un ejemplo aquí: http://www.codeproject.com/KB/WCF/ExportAnnotationFromWCF.aspx –

Respuesta

8

Disculpa que no tengo tiempo completo para responder a esto, pero hay una respuesta a tu pregunta. . Existe una interfaz que se puede implementar llamada IWsdlImportExtension que tiene dos métodos que usted estará interesado en Son:

GenerateContract() y GenerateOperation()

Si implementa estos métodos, en realidad se puede controlar el forma en que SvcUtil bombea el código agregando o eliminando CustomAttributes, etc. Debe compilar un dll con la interfaz y luego señalar la configuración de SvcUtil en la DLL y la interfaz.

Al usar este método, puede, por ejemplo, agregar documentación Xml a sus proxies generados, y así sucesivamente. Hay algunos artículos interesados ​​acerca de esto.

+0

¡Gracias por la información! Esto será útil. – jrista

10

¿Has echado un vistazo al WCF Proxy Generator en Codeplex? Basado en quién está detrás de él (Kate Gregory y Michele Leroux Bustamante), existe la esperanza de que pueda ser útil, además de que usted obtiene las fuentes, por lo que puede adaptar/retocar en el contenido de su corazón.

(no han tenido el tiempo para tomar una mirada seria a mí mismo - sin embargo - que está en el infinito "a hacer cuando tenga tiempo" lista ....)

Plus echa un vistazo blog post here by Pedram Rezaei que muestra cómo influir en el paso "Agregar referencia de servicio" de Visual Studio con su propio código personalizado.

+1

¡Muchas gracias por el enlace! Parece muy útil. Michele Bustamante es la diosa de WCF, y me gusta la mayor parte de su trabajo. – jrista

+1

Mala elección de palabra. Hows; "todo" sonido? ; P Tengo otra pregunta ... mencionó que la fuente estaba disponible, pero cuando voy a la pestaña Código fuente en el sitio Codeplex, muestra que no hay ninguna fuente disponible, y solo hay una descarga para la MSI. ¿Dónde puedo obtener el código fuente? – jrista

+1

Hay un enlace de "Fuente de complemento" en la página allí: Fuente de complemento * Obtenga la fuente para el programa de instalación y complementos aquí: http://wcfproxygenerator.codeplex.com/Release/ProjectReleases. aspx? ReleaseId = 29584 –