0

Consumindo Web Services em ASP.NET com SOAP utilizando Cache

criado por Cesar Rodrigo Bagatoli em 18/09/2006 4:30am
Abaixo segue uma classe que desenvolvi para trabalhar mais facilmente com SOAP no PHP, não está completamente pronta mas já pode ser utilizada sem problemas, porém, a parte de tratamento de erros ainda não foi muito bem implementada.

<?php
/**
* Classe TWsdl
* Criada por Cesar Rodrigo Bagatoli
*/

class TWsdl {
   
//CONSTRUTOR
   
function TWsdl($url = '') {
        $this
->url     = $url;
        $this
->params  = array();
        $this
->client  = '';
        $this
->result  = '';
        $this
->metodo  = '';
        $this
->timeout = 60;
        $this
->wsdlDir = '/caminho completo  onde ficarao os arquivos cache/';
        $this
->server  = 'http://ip do WS';
   
}
   
   
//MUDA A URL DO WSDL
   
function setUrl($url) {
        $this
->url = $url;
   
}

   
//MUDA O NOME DO MÉTODO A SER CHAMADO
   
function setMetodo($met) {
        $this
->metodo = $met;
   
}

   
//MUDA O TIMEOUT DO SOAP
   
function setTimeOut($to) {
        $this
->timeout = $to;
   
}

   
//ADICIONA UM PARAMETRO PARA A CHAMADA DO WSDL
   
function addParam($nom, $val) {
        $this
->params[$nom] = $val;
   
}
   
   
//PEGA O RESULTADO DO WSDL
   
function getResult() {
       
if($this->chkAttributes()) {
           
//NOME DO ARQUIVO DE CACHE DO WSDL - CRIA O ARQUIVO CACHE DO WS CASO AINDA NÃO HAJA
           
//LEMBRE-SE DE QUE SE FOR MODIFICADO O WS DEVE SER APAGADO O CACHE DO MESMO PARA QUE O CACHE DO WSDL SEJA RENOVADO
           
//SE QUISER PODE SER IMPLEMENTADO FACILMENTE UM ATUALIZADOR AUTOMATICO NO CACHE BASEADO NA DATA DE MODIFICAÇÃO/CRIAÇÃO DO ARQUIVO DE CACHE PARA EVITAR O TRABALHO DE ATUALIZAÇÃO MANUAL
            $nomeWSDL
= substr(strrchr($this->url, '/'), 1, -10)."-".preg_replace("/[^0-9]/", "", $this->server).".wsdl";
           
if(!file_exists($this->wsdlDir.$nomeWSDL)) {
                $u
= substr($this->server.$this->url, 0);
                $conteudo
= file_get_contents($u);
                $fp
= fopen($this->wsdlDir.$nomeWSDL,'w+');
                fwrite
($fp, $conteudo);
                fclose
($fp);
           
}
           
           
//PEGA DO CACHE
            $this
->client = new SoapClient($this->wsdlDir.$nomeWSDL, array("connection_timeout" => $this->timeout));
           
           
try {
                $this
->result = $this->client->__soapCall($this->metodo, array('parameters' => $this->params));
           
}
           
catch (Exception $e) {
                print_r
($e);
           
}
           
           
return $this->result;
       
}
       
else {
           
return 'Atributos necessários para a operação não foram informados.';
       
}
   
}
   
   
//CHECA SE TODOS OS ATRIBUTOS NECESSARIOS FORAM INFORMADOS - USADO INTERNAMENTE
   
private function chkAttributes() {
       
if($this->url == '') {
           
return false;
       
}
       
if($this->metodo == '') {
           
return false;
       
}
       
return true;
   
}
}
?>

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)