aelena.com

15 April 2010

WSDL de sistemas SAP

Filed under: .NET, Servicios Web — admin @ 15:41

Hoy he podido pasar un “agradable” rato buscando un problema en un WSDL de 3200 lineas para conectarme a un servicio web de SAP. Este pequeño post es más que nada un recordatorio. Al intentar generar un proxy tanto desde Visual Studio como desde las herramientas wsdl.exe o svcutil.exe, obtenía mensajes de error un tanto crípticos.

Corriendo esta linea


wsdl “D:\WSDLs\Vendor Exists\XI_VENDOR_EXISTS.wsdl” /l:c# /v /o:proxy.cs /parsableerrors

obtenia esto

Error: There is an error in XML document (3170, 16).
- Value cannot be null.
Parameter name: name

Bonito eh? Lo mismo con

svcutil “D:\WSDLs\Vendor Exists\XI_VENDOR_EXISTS.wsdl” /out:proxy.cs

y desde Visual Studio

The document at the url file:///D:/Projects/Tests/ConsoleApplication1/ConsoleApplication1/MI_Vendor_Exists.wsdl was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from ‘DISCO Document’ is ‘Discovery document at the URL file:///D:/Projects/Tests/ConsoleApplication1/ConsoleApplication1/MI_Vendor_Exists.wsdl could not be found.’.
- The document format is not recognized.
- Report from ‘WSDL Document’ is ‘There is an error in XML document (2, 80660).’.
- Value cannot be null.
Parameter name: name
- Report from ‘XML Schema’ is ‘The root element of a W3C XML Schema should be and its namespace should be ‘http://www.w3.org/2001/XMLSchema’.’.

Al final, nada que ver con las lineas indicadas ni con el discovery ni nada. Simeplemente un par de espacios en dos lineas como esta

<xsd:union memberTypes=" xsd:time genericTime" ...
El espacio entre la comilla y xsd es el culpable. Viendolo en retrospectiva parece fácil entender el mensaje de error de “value cannot be null,” pero hasta que se da con ello y se te ocurre buscar anomalías…. Incluso XML Spy no supo tampoco hacer nada. El caso es que creo que esto ya me ha pasado alguna vez, pero ya se sabe, dos veces la misma piedra, y tres y cuatro.

Saludos

3 January 2007

Interoperabilidad para Servicios Web entre .Net y Java

Filed under: Integracion, Servicios Web — admin @ 12:10

Sun anuncia un kit de interop para Servicios Web tanto en Java con en .Net que haría compatible el consumo de servicios recíproco de servicios implementados en ambas plataformas. Se trata del denominado WSIT (a.k.a. Tango) o Web Services Interoperability Technology. La idea es ofrecer una implementación - además en código abierto, como parece que es ahora la política de Sun - que permita la interoperabilidad entre servicios web Java - dentro de un marco enterprise - y la nueva tecnología de Microsoft, WCF (a.k.a. Indigo), facilitando el desarrollo y mantenimiento - así como la reutilización de código ya escrito sin necesidad de nuevas migraciones - de aplicaciones compuestas y distribuidas dentro de una arquitectura orientada a servicios.

Este proyecto deriva del trabajo hecho para Jax-WS, la API para servicios web en Java, y al igual que WCF, implementa las principales especificaciones WS-*:

  • Messaging (SOAP, MTOM, WS-Addressing)
  • Metadata (WSDL, WS-Policy, WS-Metadata Exchange)
  • Security (WS-Security Policy, WS-Security, WS-Trust, WS-Secure Conversation)
  • Quality-of-Service (WS-Reliable Messaging, WS-Coordination, WS-Atomic Transactions)

Esta infraestructura permite a clientes .Net o Java llamar a servicios .Net o Java de forma transparente y sin tener que ocuparse de la codificación de las cabeceras HTTP, o de la correcta transmisión de datos adjuntos, o de la gestión de sesiones seguras y confiables.

La gente de Sun afirma que se han realizado pruebas intensivas para verificar la correcta interoperabilidad, incluyendo escenarios con especificaciones WS-* algo más complejas como son “secure transactions” o “reliable messaging.”

NetBeans 5.5 incluye soporte completo para el desarrollo. La plataforma de despliegue sería GlassFish V2, que ya ofrece interoperabilidad con .Net 3.0 “out-of-the-box.”

Puede descargarse aquí. Un útil tutorial.



13 July 2006

WebDev.WebServer.exe

Filed under: .NET, Servicios Web — admin @ 15:21

Este ejecutable es el servidor light que usa Visual Studio para hospedar, ejecutar y depurar nuestros servicios web sin necesidad de tener IIS. Aparentemente, es un derivado de Cassini, aunque no es la misma cosa, y aunque no sea para hospedar aplicaciones en producción, es útil para las fases de desarrollo e incluso testeo.

Es ese icono que aparece en la barra de Visual cuando le damos al F5.

Lo bueno es que podemos controlarlo de forma independiente, es decir, que no sea Visual el que lo arranque, sino que lo podemos levantar nosotros desde una ventana de comando de Visual Studio:

webdev.webserver.exe /port:8092 /path:"C\RutaDeMiServicio"

Esto nos permite directamente poder crear un servicio con el bloc de notas, vale no es lo más cómodo, y arrancarlo mediante una sencilla línea de comandos.

Como advertencia, indicar que “RutaDeMiServicio” es la carpeta dentro de la cual está el .asmx que hemos generado con el bloc de notas o cualquier otro editor. No hay que indicar la ruta del archivo, sino solo la carpeta.

Al hacer, aparecerá un icono y si no se nos abre el explorador, clickando sobre él, podremos abrir una ventana de nuestro navegador por defecto e invocar a nuestro servicio desde ella.

Incluso ahora podemos aprovechar la herramienta wsdl.exe para generar el proxy contra el servicio hospedado en , con esta línea de comando:

wsdl http://localhost:8092/HelloWS.asmx /language:CS

saludos