Pergunta

Nosso aplicativo está fazendo interface com muitos serviços da web atualmente.Temos nosso próprio pacote que alguém escreveu há alguns anos usando UTL_HTTP e geralmente funciona, mas precisa de alguma codificação do envelope SOAP para funcionar com determinados sistemas.Gostaria de torná-lo mais genérico, mas falta experiência para saber com quantos cenários teria que lidar.As variações estão em quais namespaces precisam ser declarados e no formato dos elementos.Temos que lidar tanto com chamadas simples com poucos parâmetros quanto com aquelas que passam uma grande quantidade de dados em uma string codificada.

Eu sei que 10g possui UTL_DBWS, mas não há um grande número de casos de uso online.É estável e flexível o suficiente para uso geral? Documentação

Foi útil?

Solução

Eu tenho usado UTL_HTTP que é simples e funciona.Se você enfrentar um desafio com seu próprio pacote, provavelmente poderá encontrar uma solução em um dos muitos pacotes wrapper em torno de UTL_HTTP na rede (Google "consumindo serviços da web de pl/sql", levando você a, por exemplo,http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php)

A razão pela qual ninguém está usando UTL_DBWS é que ele não funciona em um banco de dados instalado padrão.Você precisa carregar uma tonelada de classes Java no banco de dados, mas as instruções padrão parecem estar com defeito - o processo vomita erros Java a torto e a direito e, por fim, falha.Parece que muito poucas pessoas estão dispostas a dedicar algum tempo para rastrear as dependências dos pacotes para que essa abordagem funcione.

Outras dicas

Tive esse desafio e encontrei e instalei o pacote 'SOAP API' que Sten sugere no Oracle-Base.Ele fornece algumas boas funcionalidades de criação de envelopes além de UTL_HTTP.

No entanto, houve algumas limitações relacionadas à sua pergunta.SOAP_API assume que todas as solicitações são XML simples, ou seja,apenas uma hierarquia de tags de camada.

Estendi o pacote SOAP_API para permitir que o código do cliente insira arbitrariamente uma tag extra.Assim, você pode inserir um subnível como , continuar a construir a solicitação e lembrar de inserir uma tag de fechamento.

A questão do namespace foi um problema para o projeto - diferentes níveis de XML tinham namespaces diferentes.

Uma boa ferramenta de depuração que usei é o TCP Trace do Pocket Soap.www.pocketsoap.com/tcptrace/ Você o configura como um proxy e assista aos objetos de solicitação e resposta HTTP entre o código do cliente e do servidor.

Dito tudo isso, gostamos muito de ter um cliente SOAP no banco de dados - temos acesso total a todos os dados e código PLSQL existente, podemos facilmente percorrer os cursores e chamar o aplicativo externo via SOAP quando necessário.Foi muito mais rápido e fácil do que implantar uma camada intermediária com muitos códigos Java ou .NET personalizados.Boa sorte e deixe-me saber se você gostaria de ver meu código aprimorado da API SOAP.

Também usamos UTL_HTTP de maneira semelhante à que você descreveu.Não tenho nenhuma experiência direta com UTL_DBWS, então espero que você possa acompanhar qualquer informação/experiência que puder reunir.

@kogus, não, é um design muito bom para muitas aplicações.PL/SQL é uma linguagem de programação completa que tem sido usada para muitas aplicações grandes.

Veja isso postagem mais antiga.Tenho que concordar com a resposta nº 1 desse post;é difícil imaginar um cenário em que este possa ser um bom design.

Você não pode escrever um serviço ou aplicativo independente que se comunique com uma tabela em seu banco de dados?Então você poderia implementar o que quiser como gatilho nessa tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top