2010-03-25 16 views
11

He intentado usar gSOAP para acceder a un servicio web (por ejemplo, usando WSDL suministrado para generar C stubs y luego usarlos en una aplicación). Sin embargo, descubrí que los archivos .c y de objetos generados son bastante grandes (varios megabytes), lo cual es un problema en el entorno integrado en el que trabajo.¿Hay alguna alternativa ligera a gSOAP?

¿Conoces alguna biblioteca SOAP más simple, o tengo que recurrir a generadores XML genéricos y analizadores sintácticos como ezXML?

+7

Bienvenido al (no tan) "Protocolo simple de acceso a objetos" - el hinchado cerdo solución de elefante a SOA (arquitectura orientada a servicios). –

+0

No veo por qué SOAP tiene la culpa aquí. Es el tamaño de la definición de servicios, que no tiene nada que ver con SOAP. XML o JSON sobre REST sería lo mismo, en términos de tamaño.Pero al final eso probablemente sería peor porque tiene que codificar ** toda ** la serialización usted mismo sin un enlace de datos conveniente que genere todo el código para usted. Uso gSOAP para enlaces de datos automáticos, claro ganador. De lo contrario, sin gSOAP, hacer que los programadores trabajen largas horas en la tediosa codificación XML o JSON API para servicios de gran tamaño es tan antigua. –

+0

[Más comprobaciones revela] (https://www.genivia.com/dev.html#performance) que una aplicación bastante estándar para el intercambio de mensajes XML con gSOAP lleva menos de 100k de código y ejecuta 10k mensajes/seg. La mayoría de las veces se autocodifica con herramientas, sin mucho trabajo. Bienvenido al futuro de la codificación automática. –

Respuesta

5

Recientemente investigué esta cuestión, y la mejor opción que encontré fue gSOAP, es muy madura y está bien probada. Sin embargo, decidí ir a una ruta que no sea SOAP, que era una opción ya que estoy en ambos lados, cliente y servidor. Antes de usar gSOAP, asegúrese de que puede vivir con su licencia, puede estar obligado a liberar su código o pagarlo, dependiendo de cómo lo use.

Otra opción es Apache Axis2/C, aunque no tengo experiencia (supongo que tiene una huella de tamaño similar a gSOAP). Su API cliente es here. Un tutorial sobre la API del cliente es here.

Si decide ir a la ruta XML analizada, es posible que le interese this SO pregunta (ver respuestas).

También puede consultar boost :: spirit para la ruta analizada. Tiene la capacidad de hacer analizadores pequeños, rápidos, especializados (y generales), si te sientes cómodo con C++ (se pueden escribir para reentrada, por lo que un llamado a través de un objeto estático con una interfaz externa "C" es kosher) Puedo responder por ello en el sentido general (no específico de XML). Empinada curva de aprendizaje, pero gran recompensa.

1

Por lo general, recurrimos a la creación de XML directamente (principalmente por concatenación de cadenas) donde no se puede usar una buena biblioteca SOAP.

Otra solución podría ser cambiar a JSON, que (generalmente) tiene una sobrecarga y tamaños de solicitud/respuesta más pequeños, por lo que podría ser mejor en los programas integrados. Si solo tiene un Servicio web SOAP disponible, podría usar un Script de proxy en el Servidor que traduzca las Solicitudes JSON a las Solicitudes SOAP y las Respuestas SOAP a las Respuestas JSON.

2

¿Es este un servicio web que está creando? Si es así, considere usar REST en lugar de SOAP. REST es mucho más simple, y puede usar manejadores de HTTP existentes, probados y que funcionen ahora en lugar de pasar por una enorme capa de traducción HTTP - XML ​​- SOAP.

Si está consumiendo el servicio web de otra persona, examine el esquema SOAP y/o ejemplos de respuestas. No puedo creer que defienda esto, pero si el esquema no es extensible ni recursivo, es mejor que utilices un analizador simple de LALR o incluso una coincidencia de cadenas en las respuestas HTTP sin procesar en lugar de intentar analizar SOAP o XML en absoluto. Esto es mucho más simple de implementar en C integrado.

+0

Tengo que usar el servicio web de alguien. Hasta ahora tenemos analizadores XML utilizables (el ezXML mencionado anteriormente funciona bastante bien), así que a menos que aparezca una biblioteca milagrosa de SOAP, probablemente tenga que hacerlo de esa manera :-) – che

+1

REST también tiene una desventaja importante adicional: no lo hace adaptarse a los servicios web orientados a eventos, que son la mayoría de los servicios web del mundo real. – rkellerm

1

¿Ha mirado Apache CXF. Tiene varias características código Gen

* Java to WSDL 
* WSDL to Java 
* XSD to WSDL 
* WSDL to XML 
* WSDL to SOAP 
* WSDL to service 

Una guía más útil para construir un consumidor es here.

+0

Parece agradable, sin embargo, parece ser compatible solo con Java y realmente no tengo la opción de utilizar el tiempo de ejecución de Java en el lado del cliente. – che

Cuestiones relacionadas