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.)