Unofficial Content
  • This documentation is valid for:

FAQ de Webservices con GeneXus

¿Qué pasa si tengo un Proxy?

Si para llegar del consumidor al webservice se tiene que atravesar un proxy y no sirve la configuración de Proxy que se tenga en las Internet Options de la máquina, entonces es necesario configurar las propiedades ProxyServerHost y ProxyServerPort del Location. Esto esta disponible a partir de GeneXus 9.0 U2. Más información en http://www2.gxtechnical.com/portal/hgxppredirect.aspx?15,26,0,,,18923

¿Qué pasa si cambia la URL del webservice?

Para esto está el concepto de Location. Simplemente se debe cambiar el Host, Port y BasURL del location.
Este caso se da comunmente cuando  tenemos el mismo web services en ambientes de prototipo y producción y deseamos, para fines de TEST, consumir el de test, o para cuando pasamos a producción, consumir el web service de producción, sin tener que regenerar/recompilar la aplicación.

¿Hay forma de manejar errores?

Sí, se logra con la propiedad CancelOnError del tipo de dato Location (o location.xml) y funciones GetSOAPErr() y GetSOAPErrMsg().
Más información en http://www2.gxtechnical.com/portal/hgxppredirect.aspx?15,26,0,,,15483

¿Tengo un webservice externo que provee un tipo cuya definición no esta en el wsdl, lo puedo consumir?

No, pues no sigue el estándar de la W3C. Entre quienes proveen y consumen web services con Visual Studio .NET a veces se pasan tags tipo OBJECT, pero esto no es soportado en GeneXus. Recomendamos no proveer servicios de esa forma pues además serán consumibles solamente desde .NET y no desde JAVA por ejemplo, rompiendo así con uno de los objetivos de los web services que es proveer una forma para atravesar las fronteras de las plataformas.

¿Qué debo hacer para cuando un web service está detrás de un reverse proxy?

Se debe tener en cuenta que en el WSDL hay URLs absoutas y no relativas, por lo cual estas URLs no van a ser válidas en forma predeterminada pues la aplicación no sabe cuál es la URL a traves de la cual se consume la aplicación.
Puede ser entonces que la "soap:address location" del WSDL informe que la URL es "http://servidorinterno:81/aplic/aprocedure.aspx" cuando en realidad desde afuera "http://www.dominio.com:8080/aplic/aprocedure.aspx". Para solucionar esto se debe hacer esto:

En Java: en el client.cfg colocar una linea con SERVER_NAME=www.dominio.com:8080
En .NET: en el web.config colocar una linea <add key="SERVER NAME" value="www.dominio.com:81" />

Esto es válido a partir de GeneXus X Evolution 1

¿Si tengo que realizar una aplicación 3 capas en web, la solución es usar web services?

Cuando se hace esta pregunta, normalmente no se hace referencia a las capas Browser - Web server - Database Server, sino a Web server - Application Server - Database Server. Tratermos entonces ese caso y la respuesa es: Sí, puede ser una solución, pero no la única y no necesariamente la más recomendada. Es decir:
Agregar una capa en este caso es sin duda, una pérdida de performance. El requerimiento viene normalmente por temas de seguridad: No se desea que desde el web server público se pueda acceder de alguna forma directa a la base de datos. Siendo ese el requerimiento real, es posible usar un reverse proxy, quedando la arquitectura: Browser - Reverse Proxy - Web y App server - DB Server. El único servidor público es el reverse proxy. Esta entonces es una arquitectura alternativa para solucionar los requerimientos de seguridad y sin duda mucho más facil y rápida de implementar y también más performante que la alternativa de web services.
Links interesantes:


 

Nota: esta página fue creada en el marco del Collaborative Project WebServices-FENIX/MX1. Esperamos que le sea útil. Cualquier aporte, comentario o sugerencia es bienvenido.


Last update: February 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant