wcf svcutil.exe

wcf - ¿Alternativa a SvcUtil.exe?



(2)

He estado luchando con SvcUtil todo el día, tratando de que genere código útil para algunos servicios empresariales de IMS (principalmente el servicio de administración de grupos, pero hay otros para los que también necesitamos que funcione). Puede encontrar el WSDL del servicio IMS aquí. http://www.imsglobal.org/es/index.html .

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 del 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 exactamente el mismo código que SvcUtil.) Necesitamos algo que nos dé un grado de control sobre cómo se genera el código. 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 tipos XSD específicos para los servicios definidos en el WSDL, como tipos XSD que son comunes a todos Servicios de 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 usa solo servicios .NET / WCF, pero cada vez que intenta usarlo en un entorno multiplataforma que cumple con los estándares, todo se vuelve una mierda.


¿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 / ajustar el contenido de su corazón.

(No he tenido el tiempo de analizarlo por mi cuenta, sin embargo, está en la lista interminable de "Tareas pendientes cuando llego").

Además, consulte esta publicación de blog aquí, presentada por Pedram Rezaei, que muestra cómo influir en el paso "Añadir referencia de servicio" de Visual Studio con su propio código personalizado.


Lamento que no tenga tiempo completo para responder a esto, pero hay una respuesta a su pregunta. Hay una interfaz que puede implementar llamada IWsdlImportExtension que tiene dos métodos que le interesarán. Son:

GenerateContract () y GenerateOperation ()

Si implementa estos métodos, puede controlar la forma en que SvcUtil extrae 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.

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