Ajuda com webservice

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Boa Noite !

Estou com o seguinte problema:
Preciso enviar um arquivo xml para um webservice criado pela administradora do nosso ERP.

o xml é pequeno:
<FichaAnalise>
<U_DataIns>2015-10-18</U_DataIns>
<U_Data>2015-10-18</U_Data>
<U_Item>PG01012</U_Item>
<U_R_OP>OP</U_R_OP>
<U_Quantidade>10000</U_Quantidade>
<U_BatchNum>023/15</U_BatchNum>
<U_Ficha>2</U_Ficha>
<U_TipoAnal>3</U_TipoAnal>
<U_FormAnal>2</U_FormAnal>
<U_Aprovador>6</U_Aprovador>
<U_NumPN></U_NumPN>
<U_Safra>14/15</U_Safra>
<U_NumDoc>0</U_NumDoc>
</FichaAnalise>

o caminho do webservice:
http://localhost:9292/WebService1.asmx ... chaAnalise

Em um programa interno é coletado as informações do xml acima que será transmitido para o webservice que fará a inclusão dos dados no banco.

Já fiz vários testes com base nos exemplos de NFe, não deu muito certo, então....não tenho ideia de como montar o programa.

Alguém teria um exemplo (Sem ser exemplo de NFe..rsrs) pra ajudar ?

* Usando atualmente HMG 3.1.1 com SqlServer / Oracle

******
acessando o endereço pela rede tenho o seguinte retorno:

SOAP 1.1

O exemplo a seguir mostra uma solicitação e uma resposta SOAP 1.1. Os espaços reservados mostrados devem ser substituídos por valores reais.

POST /WebService1.asmx HTTP/1.1
Host: 187.72.11.129
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/InsereFichaAnalise"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<InsereFichaAnalise xmlns="http://tempuri.org/">
<CaminhoXML>string</CaminhoXML>
</InsereFichaAnalise>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<InsereFichaAnaliseResponse xmlns="http://tempuri.org/">
<InsereFichaAnaliseResult />
</InsereFichaAnaliseResponse>
</soap:Body>
</soap:Envelope>
SOAP 1.2

O exemplo a seguir mostra uma solicitação e uma resposta SOAP 1.2. Os espaços reservados mostrados devem ser substituídos por valores reais.

POST /WebService1.asmx HTTP/1.1
Host: 187.72.11.129
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<InsereFichaAnalise xmlns="http://tempuri.org/">
<CaminhoXML>string</CaminhoXML>
</InsereFichaAnalise>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<InsereFichaAnaliseResponse xmlns="http://tempuri.org/">
<InsereFichaAnaliseResult />
</InsereFichaAnaliseResponse>
</soap12:Body>
</soap12:Envelope>

Grato.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Ajuda com webservice

Mensagem por Toledo »

Amigo, sem fazer teste fica complicado tentar ajudar, mas segue um exemplo:

Código: Selecionar todos

Func EnviaXML(cXML)
Local cSOAPAction:="http://tempuri.org/InsereFichaAnalise", cMsgRet:=""
Local cUrlWS, oServerWS, oDOMDoc, cXMLResp, cxMLSoap

    cxMLSoap:='<?xml version="1.0" encoding="utf-8"?>'
    cxMLSoap+='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
    cxMLSoap+='<soap:Body>'
    cxMLSoap+='<InsereFichaAnalise xmlns="http://tempuri.org/">'
    cxMLSoap+='<CaminhoXML>'+cXML+'</CaminhoXML>'
    cxMLSoap+='</InsereFichaAnalise>'
    cxMLSoap+='</soap:Body>'
    cxMLSoap+='</soap:Envelope>'


    cUrlWS := 'http://localhost:9292/WebService1.asmx?wsdl'

    oServerWS = Win_oleCREATEOBJECT("MSXML2.ServerXMLHTTP.5.0")

    oServerWS:open("POST", cUrlWS, .F.)
    oServerWS:setRequestHeader("SOAPAction", cSOAPAction )
    oServerWS:setRequestHeader("Content-Type", "text/xml; charset=UTF-8")

    oDOMDoc = Win_oleCREATEOBJECT("MSXML2.DOMDocument.5.0")
    oDOMDoc:async = .F.
    oDOMDoc:validateOnParse  = .T.
    oDOMDoc:resolveExternals := .F.
    oDOMDoc:preserveWhiteSpace = .T.
    oDOMDoc:LoadXML(cxMLSoap)
    IF oDOMDoc:parseError:errorCode <> 0
      cMsgRet:='Erro: xML nao carregado'
    ENDIF
    IF Empt(cMsgRet)
      TRY
        oServerWS:send(oDOMDoc:xml)
      CATCH oError
        cMsgRet:='Falha no envio do xML'
      END
    ENDIF

    IF Empt(cMsgRet)
      DO WHILE oServerWS:readyState <> 4
        HB_milliseconds(500)
      ENDDO

      cXMLResp := HB_ANSITOOEM(oServerWS:responseText)

      cMsgRet := pegaTag(cXMLResp, "InsereFichaAnaliseResult")
    ENDIF

Return (cMsgRet)

*******************************************************
Function pegaTag(cXMLcXML, cTag)
LOCAL c_Retorno, cTagInicio,cTagFim
   cTagInicio := "<"+cTag
   cTagFim := "</"+cTag+">"
   c_Retorno := SUBS( cXMLcXML, AT(cTagInicio,cXMLcXML)+LEN(cTagInicio)+1, AT(cTagFim,cXMLcXML)-(AT(cTagInicio,cXMLcXML)+LEN(cTagInicio)+1) )
RETURN(c_Retorno)
Obs: mensagem editada para declarar a variável cMsgRet:="" no início da função.

Chame a função, passando o arquivo xML para envio, por exemplo: cRetorno:=EnviaXML("c:\pasta\arquivo.xml")

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Bom dia !

Exatamente (rs), não sabia por onde iniciar.

Obrigado Toledo, vou iniciar os testes.

Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com webservice

Mensagem por JoséQuintas »

Só comentário: Como todo exemplo de transmissão é assim, acaba parecendo que o DomDocument é obrigatório.

Código: Selecionar todos

 oDOMDoc = Win_oleCREATEOBJECT("MSXML2.DOMDocument.5.0") 
     oDOMDoc:async = .F. 
     oDOMDoc:validateOnParse  = .T. 
     oDOMDoc:resolveExternals := .F. 
     oDOMDoc:preserveWhiteSpace = .T. 
     oDOMDoc:LoadXML(cxMLSoap) 
     IF oDOMDoc:parseError:errorCode <> 0 
       cMsgRet:='Erro: xML nao carregado' 
     ENDIF 
...
         oServerWS:send(oDOMDoc:xml) 
...
Poderia ser transmitido assim:

Código: Selecionar todos

oServerWs:Send( cXmlSoap )
Se quiser tirar a prova, é só fazer a comparação antes de transmitir

Código: Selecionar todos

IF cXmlSoap == oDomDoc:Xml
   ? "Não fez diferença usar oDomDoc"
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Quais o requisitos Toledo ?

**o programa em questão vai usar adodb.ch (para pegar dados do banco local)


tá dando erro: winole/1007 (0x80072ee6): msxml5.dll

aparentemente tá normal aqui...alguma sugestão ?

Grato.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Ajuda com webservice

Mensagem por Toledo »

Amigo, incluir a LIB hbwin na compilação.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com webservice

Mensagem por JoséQuintas »

Código: Selecionar todos

// oServerWs := Win_oleCREATEOBJECT("MSXML2.ServerXMLHTTP.5.0")
oServerWs := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
Altere igual acima, senão vai precisar instalar o XML 5.0, que não faz parte do Windows.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Obrigado Toledo e José Quintas.

Fiz as inclusões e alterações passadas, o erro agora mudou de msxml5.dll para msxml3.dll (rsrs...tá diminuindo...rs).

"ERROR WINOLE/1007 Erro de sistema: -2147012890 (0x80072EE6): msxml3.dll (DOS Error -2147352567).

reinstalei o XML 3 e nada, li em algum lugar que precisa de um ODBC (Driver para algo...mas o que ? a mens. não descreve o uso do ODBC)

Alguma Luz ?.

Grato.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com webservice

Mensagem por JoséQuintas »

Mas olhou em qual linha acontece isso?
Se na comunicação ou no DomDocument?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Outro detalhe....

Tem o pocketsoap para x64? (win 8.1) ?, procurei na net mas não encontrei ou não soube procurar.

Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com webservice

Mensagem por JoséQuintas »

Aqui Windows 7, arquivos originais do Windows.
c:\Windows\System32\msxml3.dll
c:\Windows\System32\msxml3r.dll
c:\Windows\System32\msxml6.dll
c:\Windows\System32\msxml6r.dll

c:\Windows\SysWOW64\msxml3.dll
c:\Windows\SysWOW64\msxml3r.dll
c:\Windows\SysWOW64\msxml6.dll
c:\Windows\SysWOW64\msxml6r.dll
Se o Windows já tem isso, não imagino porque instalar o PocketSoap.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

Boa tarde novamente José Quintas !

o que colocar em cMsgRet se errorcode = 0 ?, sendo zero vai dar erro no if abaixo não é ?

IF oDOMDoc:parseError:errorCode <> 0
cMsgRet:='Erro: xML nao carregado'
ENDIF

IF Empt(cMsgRet)
TRY
oServerWS:send(oDOMDoc:xml)
CATCH oError
cMsgRet:='Falha no envio do xML'
END
ENDIF
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com webservice

Mensagem por JoséQuintas »

Compilar usando -w3 -es2 já avisaria isso... rs... só comentário...
Pode fazer isso no início.

Código: Selecionar todos

LOCAL cXmlResp := ""
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Ajuda com webservice

Mensagem por luiz antonio da silva »

blz...rsrs

agora só tá dando erro 1005 no exported variable ASYNC, que está definida com valor .F.

Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Ajuda com webservice

Mensagem por Toledo »

luiz antonio da silva escreveu:sendo zero vai dar erro no if abaixo não é ?
Amigo, quando copiei esta função de um dos meus programas, andei retirando algumas linhas de código que era específico do meu programa, então acabei retirando a linha onde era declarado a variável cMsgRet:="". Para corrigir, basta no início da função declarar a variável:

Código: Selecionar todos

Local cSOAPAction:="http://tempuri.org/InsereFichaAnalise", cMsgRet:=""
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder