¿La mejor manera de aplicar ingeniería inversa a una interfaz de servicio web desde un archivo WSDL?

StackOverflow https://stackoverflow.com/questions/234945

Pregunta

Heredé un archivo WSDL para un servicio web en un sistema al que no tengo acceso para desarrollo y pruebas.

Necesito generar un servicio web que se adhiera a ese WSDL. El contenedor es .NET, pero si hay una manera fácil de hacer esto con otra plataforma, podríamos ver eso. El servicio web de producción está basado en Java.

¿Cuál es la mejor manera de hacer esto?

Nota: el wsdl heredado no parece ser compatible con wsdl.exe porque no cumple con WS-I Basic Profile v1.1. En particular, el grupo que lo transmitió mencionó que usa otro estándar que la herramienta de Microsoft no admite, pero no aclararon. El error está relacionado con un campo 'nombre' requerido:

Error: Element Reference '{namespace}/:viewDocumentResponse' declared in
schema type '' from namespace ''
       - the required attribute 'name' is missing

Para mayor claridad, entiendo que puedo crear fácilmente una clase de envoltura .NET desde el archivo WSDL, pero eso no es lo que necesito. Es así:

Actualización: el servicio web original se creó utilizando Axis.

Diagrama del sistema que muestra el servicio web no disponible y el servicio web simulado http: // paulw.us/blog/uploads/SO-WSDL-Question2.gif

¿Fue útil?

Solución

Estamos usando la herramienta WSCF - Contrato de servicios web primero de Thinktecture para hacer el desarrollo de servicios web creando primero el esquema XSD y luego generando interfaces de servicio usando esta herramienta. Puede ser útil generar interfaces de servicio desde WSDL, pero aún no lo he intentado yo mismo.

Otros consejos

Puede encontrar útil la utilidad de línea de comando wsdl.exe de .NET mediante la opción / serverInterface . Según la documentación:

  

Genera interfaces para el lado del servidor   implementación de una web ASP.NET   Servicio. Se genera una interfaz para   Cada enlace en el (los) documento (s) WSDL.   El WSDL solo implementa el WSDL   contrato (clases que implementan el   la interfaz no debe incluir ninguno de   lo siguiente en los métodos de clase:   Atributos del servicio web o   Atributos de serialización que cambian.   El contrato WSDL). Forma corta es   '/ si'.

Sí, puede usar WSCF (según lo anterior) para generar código del lado del servidor. La URL real se puede sobrescribir para señalar la URL de prueba que desea usar.

Sin embargo, esto solo genera un trozo. Todavía tienes que codificar el real, por ejemplo. Método GetCustomers () que es algo sospechoso porque no tiene idea de cómo funciona la implementación real.

Entonces puede simular esto o crear un servidor web ASP simple para ejecutarlo.

Intente simular la interfaz de contenedor utilizando RhinoMocks y StructureMap .

No estoy seguro si esto ayudará,

lo que he hecho recientemente es:

  • Genere el archivo .cs con la herramienta wsdl o el estudio visual
  • Lo he cambiado para que sea una clase parcial
  • He creado otra clase parcial, en la que todo lo que hace es agregar una línea para decir que la clase implementa IWhatEver
  • He creado una interfaz que es la misma que la clase de proxy generada (por lo tanto, el proxy implementa completamente la interfaz)

Luego utilicé un marco de simulacros (Moq) en mi caso, para burlarme del Servicio Web, luego utilicé la inyección de dependencia del hombre pobre (pasar el simulacro a un constructor de la clase en prueba) .. que puede manejar una instancia de IWhatever

Prueba lejos ...

Espero que ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top