Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandro Delgado

Web Service soap

Recommended Posts

Alguém poderia me dar uma força com o código abaixo, está retornando o erro, Valor de tipo 'System.Xml.XmlNode' não pode ser convertido para 'String', no trecho "CorreiosSigep.consultaCEP(varXmlEnvio)".

 

Dim varXml As String

varXml = "<?xml version=""1.0"" encoding=""UTF-8""?>"

varXml = varXml & "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:cli=""http://cliente.bean.master.sigep.bsb.correios.com.br/"">"

varXml = varXml & " <soapenv:Header/>"

varXml = varXml & " <soapenv:Body>"

varXml = varXml & " <cli:consultaCEP>"

varXml = varXml & " <cep>70002900</cep>"

varXml = varXml & " </cli:consultaCEP>"

varXml = varXml & " </soapenv:Body>"

varXml = varXml & "</soapenv:Envelope>"

 

'carrega o xml assinado

xmlDoc.LoadXml(varXml)

 

'criando um nó xml document

Dim varXmlEnvio As XmlNode = xmlDoc.DocumentElement

 

'delay para o carregamento

Threading.Thread.Sleep(2000)

 

'seta a variavel xml com o retorno do sefaz

Dim varXmlRetorno As XmlNode = CorreiosSigep.consultaCEP(varXmlEnvio)

 

 

Alguém pode dar um help?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O consultaCep está retornando uma string e você está armazenando no tipo XmlNode.

A variavel varXMLRetorno tem que ser do tipo string.

 

Se você usa o visual studio, passe o mouse em cima do consultaCep que verá o tipo de retorno dele.

 

---

Se der certo, não esqueça de aprovar a resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fabio, na verdade acho que não é este o problema, acho que está no método de chamada:

 

"Public Function buscaCliente(idcontrato as string, idCartaoPostagem as string, usuario as string, senha as string) As MDFE.wsCorreiosSigepProd.ClienteERP"

 

Estou tentando passar um xml ao invés de passar os parâmetros em separados a pedido da empresa.

 

Sabe me dizer se consigo alterar esta forma de envio para passar como xml ao invés de parâmetros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

De qualquer forma, veja o tipo de retorno:

MDFE.wsCorreiosSigepProd.ClienteERP

E o seu tipo está como XmlNode, você teria que pegar um objeto do tipo ClienteERP.

 

Ou pode ser que o seu parâmetro enviado esteja pedindo string e você está enviando um node, há overloads nesse método?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim KhaosDoctor, o parametro de envio está me pedindo para passar os parametros como string, item a item, e preciso enviar como um arquivo xml ao invés de strings.


através deste link que estou referenciando e não encontro método overloads

https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...

Se no manual diz para enviar separado, então envia separado.

 

Só que você começou falando do objeto ConsultaCep em C# e depois passou a estrutura do BuscaCliente em VB.Net.

 

Eu tenho o manual do sigepweb aqui, mas eu preciso saber exatamente o que você quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então mas a pergunta é não tem como enviar como xml?

 

Não sei, isso vai depender da API que você está usando. Se a API aceitar o XML então dá, se não não dá. A solução pode ser passar pelo xml em um laço e ir enviando as strings.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fabio obrigado pela ajuda e desculpa é que estava tentando em C# e em VB.Net também!

 

O que me foi pedido é para criar um web service que recebesse um arquivo xml, efetuasse o envio do mesmo e recebesse o retorno em xml para salvar como xml no banco!

 

Mas não consigo fazer o envio e nem o recebimento em xml.

 

Tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fabio obrigado pela ajuda e desculpa é que estava tentando em C# e em VB.Net também!

 

O que me foi pedido é para criar um web service que recebesse um arquivo xml, efetuasse o envio do mesmo e recebesse o retorno em xml para salvar como xml no banco!

 

Mas não consigo fazer o envio e nem o recebimento em xml.

 

Tem alguma idéia?

Certo. Mas, é o consultaCep ou o BuscaCliente o seu problema?

 

O consultaCep, de acordo com o manual, recebe uma string e não um XMLNode. Então, faça assim:

 

Dim varXml As String
        varXml = "<?xml version=""1.0"" encoding=""UTF-8""?>"
        varXml = varXml & "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlso.../soap/envelope/""xmlns:cli=""http://cliente.bean.master.sigep.bsb.correios.com.br/"">"
        varXml = varXml & " <soapenv:Header/>"
        varXml = varXml & "     <soapenv:Body>"
        varXml = varXml & "         <cli:consultaCEP>"
        varXml = varXml & "             <cep>70002900</cep>"
        varXml = varXml & "         </cli:consultaCEP>"
        varXml = varXml & "     </soapenv:Body>"
        varXml = varXml & "</soapenv:Envelope>"


        'seta a variavel xml com o retorno do sefaz
        Dim varXmlRetorno As XmlNode = CorreiosSigep.consultaCEP(varXml)
Dependendo da assinatura do seu CorreiosSigep.consultaCEP() pode ser que tenha que alterar o tipo do XMLNode. Mas, o importante é que você estava passando para o consultaCEP a variavel varXmlEnvio que deve ser do tipo XMLNode e o consultaCep deve receber uma string.
Eu usei os termos "deve" porque você ainda não passou a assinatura do consultaCEP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Fabio,

 

a string "Dim varXmlRetorno As XmlNode = CorreiosSigep.consultaCEP(varXml)" está retornando o erro "Valor do tipo 'MDFE.wsCorreiosSigepProd.EnderecoERP' não pode ser convertido para 'System.Xml.XmlNode'".

 

Também tentei corverter o retorno para XmlDocument mas sem sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É o que eu falei ali encima, EnderecoCEP é um objeto e não uma string, você vai ter que usar um objeto do mesmo tipo para receber o valor dele, a não ser que ele possua alguma propriedade ou método para transformá-lo em string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Fabio,

 

a string "Dim varXmlRetorno As XmlNode = CorreiosSigep.consultaCEP(varXml)" está retornando o erro "Valor do tipo 'MDFE.wsCorreiosSigepProd.EnderecoERP' não pode ser convertido para 'System.Xml.XmlNode'".

 

Também tentei corverter o retorno para XmlDocument mas sem sucesso!

 

Qual a assinatura do ConsultaCep?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia senhores, obrigado pela força!

 

trabalhando com o ws dos correios apareceu outra dúvida:

 

A propriedade do objeto objColetaReversaTO.produto está me retornado o seguinte erro "Acesso à propriedade deve atribuir à propriedade ou usar seu valor." A mesma me pede: "Produto() AS Public Property remetente As MDFe.wsCorreiosSigepHomReversa.remetenteTO()"

 

Dai criei o objeto "objProdutoTo" e setei suas propriedades, mas na hora de informar que:

 

objColetaReversaTO.produto = objProdutoTo

 

Ele me retorna erro: 'MDFe.wsCorreiosSigepHomReversa.produtoTO' não pode ser indexada porque não possui propriedade padrão.

 

Alguém sabe como resolver esta situação?

 

 

alguém por favor???

Compartilhar este post


Link para o post
Compartilhar em outros sites

este é o objeto que solicita:

 

 <System.Xml.Serialization.XmlElementAttribute("produto", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable:=true)>  _
        Public Property produto() As produtoTO()
            Get
                Return Me.produtoField
            End Get
            Set
                Me.produtoField = value
            End Set
        End Property


Esta é a classe que faz o envio para está propriedade:


    '''<remarks/>
    <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34230"),  _
     System.SerializableAttribute(),  _
     System.Diagnostics.DebuggerStepThroughAttribute(),  _
     System.ComponentModel.DesignerCategoryAttribute("code"),  _
     System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://webservice.scol.correios.com.br/")>  _
    Partial Public Class produtoTO
        
        Private codigoField As Long
        
        Private codigoFieldSpecified As Boolean
        
        Private tipoField As Long
        
        Private tipoFieldSpecified As Boolean
        
        Private qtdField As Long
        
        Private qtdFieldSpecified As Boolean
        
        '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)>  _
        Public Property codigo() As Long
            Get
                Return Me.codigoField
            End Get
            Set
                Me.codigoField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlIgnoreAttribute()>  _
        Public Property codigoSpecified() As Boolean
            Get
                Return Me.codigoFieldSpecified
            End Get
            Set
                Me.codigoFieldSpecified = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)>  _
        Public Property tipo() As Long
            Get
                Return Me.tipoField
            End Get
            Set
                Me.tipoField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlIgnoreAttribute()>  _
        Public Property tipoSpecified() As Boolean
            Get
                Return Me.tipoFieldSpecified
            End Get
            Set
                Me.tipoFieldSpecified = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)>  _
        Public Property qtd() As Long
            Get
                Return Me.qtdField
            End Get
            Set
                Me.qtdField = value
            End Set
        End Property
        
        '''<remarks/>
        <System.Xml.Serialization.XmlIgnoreAttribute()>  _
        Public Property qtdSpecified() As Boolean
            Get
                Return Me.qtdFieldSpecified
            End Get
            Set
                Me.qtdFieldSpecified = value
            End Set
        End Property
    End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.