Executar um WebService

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Bom dia
Gostaria de saber se é possivel e como posso executar um WebService de asp.net (asm) no oracle Forms PL/SQL.
Cumprimentos,
Daniel Gomes
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

CREATE OR REPLACE FUNCTION get_city_from_zipcode (p_zipcode  IN  VARCHAR2)
  RETURN VARCHAR2
AS
  l_request   soap_api.t_request;
  l_response  soap_api.t_response;
  l_return    VARCHAR2(32767);
  
  l_url          VARCHAR2(32767);
  l_namespace    VARCHAR2(32767);
  l_method       VARCHAR2(32767);
  l_soap_action  VARCHAR2(32767);
  l_result_name  VARCHAR2(32767);
BEGIN
  -- Set proxy details if no direct net connection.
  --UTL_HTTP.set_proxy('myproxy:4480', NULL);
  --UTL_HTTP.set_persistent_conn_support(TRUE);

  -- Set proxy authentication if necessary.
  --soap_api.set_proxy_authentication(p_username => 'myusername',
  --                                  p_password => 'mypassword');

  l_url         := 'http://webservices.imacination.com/distance/Distance.jws';
  l_namespace   := 'xmlns="' || l_url || '"';
  l_method      := 'getCity';
  l_soap_action := l_url || '#getCity';
  l_result_name := 'getCityReturn';
  
  l_request := soap_api.new_request(p_method       => l_method,
                                    p_namespace    => l_namespace);

  soap_api.add_parameter(p_request => l_request,
                         p_name    => 'zip',
                         p_type    => 'xsd:string',
                         p_value   => p_zipcode);

  l_response := soap_api.invoke(p_request => l_request,
                                p_url     => l_url,
                                p_action  => l_soap_action);

  l_return := soap_api.get_return_value(p_response  => l_response,
                                        p_name      => l_result_name,
                                        p_namespace => l_namespace);

  RETURN l_return;
END;
/
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Desculpa Mas podias me so me indicar uma luzes eu tenho varias Functions no meu wsd como posso referencia-la no PKC .
Cumprimentos DG
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

l_soap_action
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Desculpa Vitor
Expliquei mal a minha duvida é para cada função que chame do WSD tebnho que criar este codigo.
Cumprimentos,
DG
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Bom Daniel...

o que quer fazer?

consumir via pl/sql um serviço que foi escrito em asp.net .. certo?!

os serviço pode ter diferentes port types (estes são os métodos que o desenvolvedor do serviço disponibilizado implementou) e dai resta você saber qual você quer chamar e passar isso via parametro atraves da url do end Point do serviço

basicamente
este trecho abaixo que você deve customizar

Selecionar tudo

  l_url         := 'http://webservices.imacination.com/distance/Distance.jws';
  l_namespace   := 'xmlns="' || l_url || '"';
  l_method      := 'getCity';
  l_soap_action := l_url || '#getCity';
  l_result_name := 'getCityReturn'; 
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Sim Vitor irá a ser atraves do url mas no meu WSD tenho varias Funçoes ,
No exemplo que deste está bem explicito, mas pelo que estas a indicar so consigo consumir uma function por cada Instancia Correcto?
Neste Caso,
l_url := 'http://webservices.imacination.com/dist ... stance.jws';
l_namespace := 'xmlns="' || l_url || '"';
l_method := 'getCity';
l_soap_action := l_url || '#getCity';
l_result_name := 'getCityReturn';
Agora queria chamar a funçao morada
Teria de Fazer uma nova função no PL/SQL e depois

l_url := 'http://webservices.imacination.com/dist ... stance.jws';
l_namespace := 'xmlns="' || l_url || '"';
l_method := 'getmorda';
l_soap_action := l_url || '#getmorada';
l_result_name := 'getmoradaReturn';

Certo?
Cumprimentos,
DG
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

o que postei foi so um exemplo para você se guiar..

nada impede que você crie um oracle type e faça todas as chamadas que precisa dentro da mesma function e va adicionando o retorno no seu type e dai retorne ele da sua function.. se o fizer você so chamara a sua function uma vez..
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Ok
Muito Obrigado
Irei Implementar qualquer duvida já sei onde voltar!
Cumprimentos,
DG
gomesd
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 16 Dez 2009 10:12 pm
Localização: Lisboa

Boa tarde
Ao compilar o codigo acima transescrito da me o erro que o soap_api.t_request; tem de estar declarado.
Cumprimentos,
DG
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes