Pregunta

Nuestra aplicación interactúa con muchos servicios web en estos días.Tenemos nuestro propio paquete que alguien escribió hace unos años usando UTL_HTTP y generalmente funciona, pero necesita algo de codificación del sobre SOAP para funcionar con ciertos sistemas.Me gustaría hacerlo más genérico, pero me falta experiencia para saber con cuántos escenarios tendría que lidiar.Las variaciones están en los espacios de nombres que deben declararse y el formato de los elementos.Tenemos que manejar tanto llamadas simples con unos pocos parámetros como aquellas que pasan una gran cantidad de datos en una cadena codificada.

Sé que 10g tiene UTL_DBWS, pero no hay una gran cantidad de casos de uso en línea.¿Es lo suficientemente estable y flexible para uso general? Documentación

¿Fue útil?

Solución

He usado UTL_HTTP que es simple y funciona.Si se enfrenta a un desafío con su propio paquete, probablemente pueda encontrar una solución en uno de los muchos paquetes contenedores alrededor de UTL_HTTP en la red (Google "consume servicios web desde pl/sql", lo que lo lleva a, por ejemplo,http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php)

La razón por la que nadie está usando UTL_DBWS es que no es funcional en una base de datos instalada por defecto.Necesita cargar un montón de clases de Java en la base de datos, pero las instrucciones estándar parecen defectuosas: el proceso arroja errores de Java a diestro y siniestro y finalmente falla.Parece que muy pocas personas han estado dispuestas a tomarse el tiempo para rastrear las dependencias del paquete para que este enfoque funcione.

Otros consejos

Tuve este desafío y encontré e instalé el paquete 'SOAP API' que Sten sugiere en Oracle-Base.Proporciona una buena funcionalidad de creación de sobres además de UTL_HTTP.

Sin embargo, hubo algunas limitaciones relacionadas con su pregunta.SOAP_API asume que todas las solicitudes son XML simples, es decir.Jerarquía de etiquetas de una sola capa.

Extendí el paquete SOAP_API para permitir que el código del cliente inserte arbitrariamente una etiqueta adicional.Por lo tanto, puede insertar un subnivel como, continuar creando la solicitud y recordar insertar una etiqueta de cierre.

El problema del espacio de nombres fue un problema para el proyecto: diferentes niveles de XML tenían diferentes espacios de nombres.

Una buena herramienta de depuración que utilicé es TCP Trace de Pocket Soap.www.pocketsoap.com/tcptrace/ Lo configura como un proxy y observa los objetos de solicitud y respuesta HTTP entre el código del cliente y el servidor.

Dicho todo esto, nos gusta mucho tener un cliente SOAP en la base de datos: tenemos acceso completo a todos los datos y al código PLSQL existente, podemos recorrer fácilmente los cursores y llamar a la aplicación externa a través de SOAP cuando sea necesario.Fue mucho más rápido y sencillo que implementar un nivel medio con mucho código Java o .NET personalizado.Buena suerte y avíseme si desea ver mi código API SOAP mejorado.

También hemos utilizado UTL_HTTP de forma similar a lo que usted ha descrito.No tengo ninguna experiencia directa con UTL_DBWS, así que espero que puedas seguir con cualquier información/experiencia que puedas recopilar.

@kogus, no, es un diseño bastante bueno para muchas aplicaciones.PL/SQL es un lenguaje de programación completo que se ha utilizado para muchas aplicaciones importantes.

Mira esto Entrada antigua.Tengo que estar de acuerdo con la respuesta número uno de esa publicación;Es difícil imaginar un escenario en el que este pueda ser un buen diseño.

¿No puedes escribir un servicio o una aplicación independiente que se comunique con una tabla de tu base de datos?Entonces podrías implementar lo que quieras como disparador en esa mesa.

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