WEBSERVICE NO VB6
Olá pessoal, estou tentando consumir uma webservice passando parâmetro para obter um resultado no retorno, mas não estou conseguindo. Pequei um exemplo de como passar parâmetro em um link citado aqui mesmo no forum e apenas adaptei ao meu. Alguém poderia me dizer onde estou errando, grato.
Private Sub Command1_Click()
Dim strSoapAction As String
Dim strUrl As String
Dim strXml As String
Dim sNFnumero As String
Dim iNFmodelo As Integer
Dim sNFserie As String
Dim sNFemissao As String
Dim dFvalor As Double
Dim sCNPJfornecedor As String
Dim sCNPJorgao As String
Dim sResultado As String
Dim sResultadoDesc As String
sNFnumero = [Ô]000035[Ô]
nNFmodelo = 1
sNFserie = [Ô]A[Ô]
sNFemissao = [Ô]15/2/2008[Ô]
sNFvalor = 16250
sCNPJfornecedor = [Ô]06556003000192[Ô]
sCNPJorgao = [Ô]08096570000139[Ô]
sResultado = [Ô][Ô]
sResultadoDesc = [Ô][Ô]
txtOutput.Text = [Ô][Ô]
strUrl = [Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/service.asmx[Ô]
strSoapAction = [Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/LerChaveAutenticadora[Ô]
strXml = [Ô]<?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>[Ô] & _
[Ô]<LerChaveAutenticadora xmlns=[Ô][Ô]http://www.set.rn.gov.br/compralegal/wscompralegal[Ô][Ô]>[Ô] & _
[Ô]<strNfnumero>[Ô] & sNFnumero & [Ô]</strNfnumero>[Ô] & _
[Ô]<intNfmodelo>[Ô] & nNFmodelo & [Ô]</intNfmodelo>[Ô] & _
[Ô]<strNfserie>[Ô] & sNFserie & [Ô]</strNfserie>[Ô] & _
[Ô]<dtNfemissao>[Ô] & sNFemissao & [Ô]</dtNfemissao>[Ô] & _
[Ô]<dblNfvalortotal>[Ô] & sNFvalor & [Ô]</dblNfvalortotal>[Ô] & _
[Ô]<strCnpjfornecedor>[Ô] & sCNPJfornecedor & [Ô]</strCnpjfornecedor>[Ô] & _
[Ô]<strCnpjorgaopublico>[Ô] & sCNPJorgao & [Ô]</strCnpjorgaopublico>[Ô] & _
[Ô]<strResultado>[Ô] & sResultado & [Ô]</strResultado>[Ô] & _
[Ô]<strResultadoDesc>[Ô] & sResultadoDesc & [Ô]</strResultadoDesc>[Ô] & _
[Ô]</LerChaveAutenticadora>[Ô] & _
[Ô]</soap:Body>[Ô] & _
[Ô]</soap:Envelope>[Ô]
txtOutput.Text = PostWebservice(strUrl, strSoapAction, strXml)
End Sub
Private Function PostWebservice(ByVal AsmxUrl As String, ByVal SoapActionUrl As String, ByVal XmlBody As String) As String
Dim objDom As Object
Dim objXmlHttp As Object
Dim strRet As String
Dim intPos1 As Integer
Dim intPos2 As Integer
On Error GoTo Err_PW
[ô] Create objects to DOMDocument and XMLHTTP
Set objDom = CreateObject([Ô]MSXML2.DOMDocument[Ô])
Set objXmlHttp = CreateObject([Ô]MSXML2.XMLHTTP[Ô])
[ô] Load XML
objDom.async = False
objDom.loadXML XmlBody
[ô] Open the webservice
objXmlHttp.open [Ô]POST[Ô], AsmxUrl, False
[ô] Create headings
objXmlHttp.setRequestHeader [Ô]Content-Type[Ô], [Ô]text/xml; charset=utf-8[Ô]
objXmlHttp.setRequestHeader [Ô]SOAPAction[Ô], SoapActionUrl
[ô] Send XML command
objXmlHttp.send objDom.xml
[ô] Get all response text from webservice
strRet = objXmlHttp.responseText
[ô] Close object
Set objXmlHttp = Nothing
[ô] Extract result
intPos1 = InStr(strRet, [Ô]Result>[Ô]) + 7
intPos2 = InStr(strRet, [Ô]</[Ô])
If intPos1 > 7 And intPos2 > 0 Then
strRet = Mid(strRet, intPos1, intPos2 - intPos1)
End If
[ô] Return result
PostWebservice = strRet
Exit Function
Err_PW:
PostWebservice = [Ô]Error: [Ô] & Err.Number & [Ô] - [Ô] & Err.Description
End Function
Private Sub Command1_Click()
Dim strSoapAction As String
Dim strUrl As String
Dim strXml As String
Dim sNFnumero As String
Dim iNFmodelo As Integer
Dim sNFserie As String
Dim sNFemissao As String
Dim dFvalor As Double
Dim sCNPJfornecedor As String
Dim sCNPJorgao As String
Dim sResultado As String
Dim sResultadoDesc As String
sNFnumero = [Ô]000035[Ô]
nNFmodelo = 1
sNFserie = [Ô]A[Ô]
sNFemissao = [Ô]15/2/2008[Ô]
sNFvalor = 16250
sCNPJfornecedor = [Ô]06556003000192[Ô]
sCNPJorgao = [Ô]08096570000139[Ô]
sResultado = [Ô][Ô]
sResultadoDesc = [Ô][Ô]
txtOutput.Text = [Ô][Ô]
strUrl = [Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/service.asmx[Ô]
strSoapAction = [Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/LerChaveAutenticadora[Ô]
strXml = [Ô]<?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>[Ô] & _
[Ô]<LerChaveAutenticadora xmlns=[Ô][Ô]http://www.set.rn.gov.br/compralegal/wscompralegal[Ô][Ô]>[Ô] & _
[Ô]<strNfnumero>[Ô] & sNFnumero & [Ô]</strNfnumero>[Ô] & _
[Ô]<intNfmodelo>[Ô] & nNFmodelo & [Ô]</intNfmodelo>[Ô] & _
[Ô]<strNfserie>[Ô] & sNFserie & [Ô]</strNfserie>[Ô] & _
[Ô]<dtNfemissao>[Ô] & sNFemissao & [Ô]</dtNfemissao>[Ô] & _
[Ô]<dblNfvalortotal>[Ô] & sNFvalor & [Ô]</dblNfvalortotal>[Ô] & _
[Ô]<strCnpjfornecedor>[Ô] & sCNPJfornecedor & [Ô]</strCnpjfornecedor>[Ô] & _
[Ô]<strCnpjorgaopublico>[Ô] & sCNPJorgao & [Ô]</strCnpjorgaopublico>[Ô] & _
[Ô]<strResultado>[Ô] & sResultado & [Ô]</strResultado>[Ô] & _
[Ô]<strResultadoDesc>[Ô] & sResultadoDesc & [Ô]</strResultadoDesc>[Ô] & _
[Ô]</LerChaveAutenticadora>[Ô] & _
[Ô]</soap:Body>[Ô] & _
[Ô]</soap:Envelope>[Ô]
txtOutput.Text = PostWebservice(strUrl, strSoapAction, strXml)
End Sub
Private Function PostWebservice(ByVal AsmxUrl As String, ByVal SoapActionUrl As String, ByVal XmlBody As String) As String
Dim objDom As Object
Dim objXmlHttp As Object
Dim strRet As String
Dim intPos1 As Integer
Dim intPos2 As Integer
On Error GoTo Err_PW
[ô] Create objects to DOMDocument and XMLHTTP
Set objDom = CreateObject([Ô]MSXML2.DOMDocument[Ô])
Set objXmlHttp = CreateObject([Ô]MSXML2.XMLHTTP[Ô])
[ô] Load XML
objDom.async = False
objDom.loadXML XmlBody
[ô] Open the webservice
objXmlHttp.open [Ô]POST[Ô], AsmxUrl, False
[ô] Create headings
objXmlHttp.setRequestHeader [Ô]Content-Type[Ô], [Ô]text/xml; charset=utf-8[Ô]
objXmlHttp.setRequestHeader [Ô]SOAPAction[Ô], SoapActionUrl
[ô] Send XML command
objXmlHttp.send objDom.xml
[ô] Get all response text from webservice
strRet = objXmlHttp.responseText
[ô] Close object
Set objXmlHttp = Nothing
[ô] Extract result
intPos1 = InStr(strRet, [Ô]Result>[Ô]) + 7
intPos2 = InStr(strRet, [Ô]</[Ô])
If intPos1 > 7 And intPos2 > 0 Then
strRet = Mid(strRet, intPos1, intPos2 - intPos1)
End If
[ô] Return result
PostWebservice = strRet
Exit Function
Err_PW:
PostWebservice = [Ô]Error: [Ô] & Err.Number & [Ô] - [Ô] & Err.Description
End Function
Qual é a mensagem de erro que retorna quando você tenta executar o código?
A mensagem de erro é o seguinte:
<?xml version=[Ô]1.0[Ô] encoding=[Ô]utf-8[Ô]?><soap:Envelope xmlns:soap=[Ô]http://schemas.xmlsoap.org/soap/envelope/[Ô] xmlns:xsi=[Ô]http://www.w3.org/2001/XMLSchema-instance[Ô] xmlns:xsd=[Ô]http://www.w3.org/2001/XMLSchema[Ô]><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Server was unable to read request. ---> There is an error in XML document (2, 566). ---> Instance validation error: [ô][ô] is not a valid value for RESULTADO.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>
nesse link tem um exemplo de como fazer no VB.NET e os parâmetros que devo montar
http://www.tce.rn.gov.br/2009/download/siai2009/Compra%20Legal%20-%20Webservice[1].pdf
<?xml version=[Ô]1.0[Ô] encoding=[Ô]utf-8[Ô]?><soap:Envelope xmlns:soap=[Ô]http://schemas.xmlsoap.org/soap/envelope/[Ô] xmlns:xsi=[Ô]http://www.w3.org/2001/XMLSchema-instance[Ô] xmlns:xsd=[Ô]http://www.w3.org/2001/XMLSchema[Ô]><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Server was unable to read request. ---> There is an error in XML document (2, 566). ---> Instance validation error: [ô][ô] is not a valid value for RESULTADO.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>
nesse link tem um exemplo de como fazer no VB.NET e os parâmetros que devo montar
http://www.tce.rn.gov.br/2009/download/siai2009/Compra%20Legal%20-%20Webservice[1].pdf
E ai galera! alguém mais poderia me ajudar, nessa bronca. Valeu.
A rotina em VB.NET funcionou direitinho aqui nos testes... agora em VB6 está dando um erro diferente do seu.
Veja o código e o erro a seguir:
Código
[ô][ô][ô]<remarks/>
NO
[ô][ô][ô]<remarks/>
VA
[ô][ô][ô]<remarks/>
OK
End Enum
Private Sub Command1_Click()
On Error GoTo erro
Dim soap, resp As String, strAutenticador As String
Dim enResultado As RESULTADO, strResultadoDescricao As String
Set soap = CreateObject([Ô]MSSOAP.SoapClient30[Ô])
Call soap.MSSoapInit([Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/service.asmx?WSDL[Ô], [Ô]Service[Ô])
strAutenticador = soap.LerChaveAutenticadora([Ô]000035[Ô], 1, [Ô]A[Ô], [Ô]15/2/2008[Ô], 16250, [Ô]06556003000192[Ô], [Ô]08096570000139[Ô], enResultado, strResultadoDescricao)
If enResultado = RESULTADO.OK Then
MsgBox enResultado & [Ô] - [Ô] & strResultadoDescricao
Else
MsgBox strAutenticador
End If
Exit Sub
erro:
MsgBox Err.Description
End Sub
Erro
[txt-color=#e80000]Server was unable to read request. ---> There is an error in XML document (1, 1248). ---> Instance validation error: [ô]0[ô] is not a valid value for RESULTADO.[/txt-color]
Veja o código e o erro a seguir:
Option Explicit
Private Enum RESULTADO
NO
[ô][ô][ô]<remarks/>
VA
[ô][ô][ô]<remarks/>
OK
End Enum
Private Sub Command1_Click()
On Error GoTo erro
Dim soap, resp As String, strAutenticador As String
Dim enResultado As RESULTADO, strResultadoDescricao As String
Set soap = CreateObject([Ô]MSSOAP.SoapClient30[Ô])
Call soap.MSSoapInit([Ô]http://www.set.rn.gov.br/compralegal/wscompralegal/service.asmx?WSDL[Ô], [Ô]Service[Ô])
strAutenticador = soap.LerChaveAutenticadora([Ô]000035[Ô], 1, [Ô]A[Ô], [Ô]15/2/2008[Ô], 16250, [Ô]06556003000192[Ô], [Ô]08096570000139[Ô], enResultado, strResultadoDescricao)
If enResultado = RESULTADO.OK Then
MsgBox enResultado & [Ô] - [Ô] & strResultadoDescricao
Else
MsgBox strAutenticador
End If
Exit Sub
erro:
MsgBox Err.Description
End Sub
TECLA! o meu tb está dando esse erro, o que poderá ser amigo? abraços.
Tópico encerrado , respostas não são mais permitidas