Erro ao fazer envelope SOAP

Olá a todos.

Estou tentando gerar NFS-e para o município de São Pedro/SP.

O provedor é Pronim e utilizam ABRASF 2.03.

Sou novo em com webservice e tenho um pouco de dificuldades de encontrar/compreender a documentação.

Pelo que compreendi, tenho que gerar um XML envelope no seguinte formato:

internal XmlDocument CriarEnvelopeSoap(string xmlBody, string versaoCab = "1.0", string versaoDados = "2.03")
{
    string msgCabec = "<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" versao=\"1.00\"><versaoDados>" + versaoDados.Trim() + "</versaoDados></cabecalho>";

    StringBuilder sbEnvelope = new StringBuilder();
    sbEnvelope.AppendLine("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:nfse=\"http://tempuri.org/\">");
    sbEnvelope.AppendLine("<soapenv:Header/>");
    sbEnvelope.AppendLine("<soapenv:Body>");
    sbEnvelope.AppendLine("<nfse:RecepcionarLoteRps>");
    sbEnvelope.AppendLine("<nfseCabecMsg>" + msgCabec + "</nfseCabecMsg>");
    sbEnvelope.AppendLine("<nfse:xmlEnvio>" + xmlBody.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "") + "</nfse:xmlEnvio>");
    sbEnvelope.AppendLine("</nfse:RecepcionarLoteRps>");
    sbEnvelope.AppendLine("</soapenv:Body>");
    sbEnvelope.AppendLine("</soapenv:Envelope>");

    XmlDocument soapEnvelopeXml = new XmlDocument();
    soapEnvelopeXml.PreserveWhitespace = false;
    soapEnvelopeXml.LoadXml(sbEnvelope.ToString());

    return soapEnvelopeXml;
}

O xmlBody é o XML assinado no padrão ABRASF 2.03.

Fiz um primeiro teste sem enviar informação no xmlBody somente para saber se consegui me comunicar com o webservice e, como esperado, retornou mensagem dizendo que o xml não estava no padrão.

Após isso adicionei o xmlBody, quando envio para o webservice ocorre a seguinte exceção:

“System.Net.WebException: ‘O servidor remoto retornou um erro: (500) Erro Interno do Servidor.’”

O que está de errado?

Obs.: infelizmente não pude enviar o XML completo

Grato.
Renato

Prezados,

Fiz diversas alterações e correções em no XML do envelope SOAP e resolveu o problema 500 mas, surgiu outro problema.

Atualmente estou enviando o seguinte XML:

StringBuilder sbEnvelope = new StringBuilder();
sbEnvelope.Append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:nfse=\"http://tempuri.org/\">"); 
sbEnvelope.AppendLine("<soapenv:Header>");
sbEnvelope.AppendLine("</soapenv:Header>");
sbEnvelope.AppendLine("<soapenv:Body>");
sbEnvelope.AppendLine("<nfse:cabecalho versao=\"1.0\">");
sbEnvelope.AppendLine("<nfse:versaoDados>2.03</nfse:versaoDados>");
sbEnvelope.AppendLine("</nfse:cabecalho>");
sbEnvelope.AppendLine("<nfse:RecepcionarLoteRps>");
sbEnvelope.AppendLine("<nfse:xmlEnvio>" + xmlBody.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "") + "</nfse:xmlEnvio>");
sbEnvelope.AppendLine("</nfse:RecepcionarLoteRps>");
sbEnvelope.AppendLine("</soapenv:Body>");
sbEnvelope.AppendLine("</soapenv:Envelope>");

Ao enviar esse XML recebo o erro que segue a abaixo, mas a tag EnviarLoteRpsEnvio está no XML antes da tag LoteRps, conforme schema.

<?xml version="1.0"?>

-<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">


-<s:Body>


-<s:Fault>

<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>

<faultstring xml:lang="pt-BR">Erro durante a desserialização do corpo da mensagem de solicitação para a operação 'RecepcionarLoteRps'.</faultstring>


-<detail>


-<ExceptionDetail xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel">

<HelpLink i:nil="true"/>


-<InnerException>

<HelpLink i:nil="true"/>


-<InnerException>

<HelpLink i:nil="true"/>

<InnerException i:nil="true"/>

<Message>Espera-se elemento End 'EnviarLoteRpsEnvio' no namespace 'http://www.abrasf.org.br/nfse.xsd'. Encontrado elemento 'LoteRps' do namespace 'http://www.abrasf.org.br/nfse.xsd'. Linha 1, posição 376.</Message>

<StackTrace> em System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)em System.Xml.XmlExceptionHelper.ThrowEndElementExpected(XmlDictionaryReader reader, String localName, String ns)em System.Xml.XmlBaseReader.ReadEndElement()em System.Xml.XmlBaseReader.ReadElementString()em Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderINFSEGeracao.Read23_RecepcionarLoteRps()em Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer20.Deserialize(XmlSerializationReader reader)em System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)</StackTrace>

<Type>System.Xml.XmlException</Type>

</InnerException>

<Message>Erro no documento XML (1, 376).</Message>

<StackTrace> em System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)em System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)</StackTrace>

<Type>System.InvalidOperationException</Type>

</InnerException>

<Message>Erro durante a desserialização do corpo da mensagem de solicitação para a operação 'RecepcionarLoteRps'.</Message>

<StackTrace> em System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)em System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)em System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)em System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)em System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)em System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)em System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)em System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>

<Type>System.ServiceModel.CommunicationException</Type>

</ExceptionDetail>

</detail>

</s:Fault>

</s:Body>

</s:Envelope>

Alguma dita do que está ocorrendo?

Grato,
Renato

O Provedor é a Pronim ou GovBR.
Você está mandando o XML sem converter em String ou sem usar o CDATA.

Segue abaixo o modelo:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
    <soapenv:Header>
        <tem:cabecalho versao="203">
            <tem:versaoDados>2.03</tem:versaoDados>
        </tem:cabecalho>
    </soapenv:Header>
    <soapenv:Body>
        <tem:EnviarLoteRpsSincrono>
            <tem:xmlEnvio>
                <![CDATA[<EnviarLoteRpsSincronoEnvio><LoteRps Id="Lote_1" versao="2.03"><NumeroLote>1</NumeroLote><CpfCnpj><Cnpj>12346158000141</Cnpj></CpfCnpj><InscricaoMunicipal>202112345</InscricaoMunicipal><QuantidadeRps>1</QuantidadeRps><ListaRps><Rps><InfDeclaracaoPrestacaoServico Id="Dec_185"><Rps><IdentificacaoRps><Numero>1</Numero><Serie>85</Serie><Tipo>1</Tipo></IdentificacaoRps><DataEmissao>2024-05-24</DataEmissao><Status>1</Status></Rps><Competencia>2024-05-24</Competencia><Servico><Valores><ValorServicos>100.35</ValorServicos><ValorCofins>2</ValorCofins><ValorIss>2.01</ValorIss><Aliquota>2</Aliquota></Valores><IssRetido>2</IssRetido><ItemListaServico>09.01</ItemListaServico><CodigoCnae>6203100</CodigoCnae><CodigoTributacaoMunicipio>63194</CodigoTributacaoMunicipio><Discriminacao>discriminacao I; discriminacao II;discriminacao III; discriminacao IV</Discriminacao><CodigoMunicipio>3550407</CodigoMunicipio><CodigoPais>1058</CodigoPais><ExigibilidadeISS>1</ExigibilidadeISS><MunicipioIncidencia>3550407</MunicipioIncidencia></Servico><Prestador><CpfCnpj><Cnpj>44596158000141</Cnpj></CpfCnpj><InscricaoMunicipal>202164085</InscricaoMunicipal></Prestador><Tomador><IdentificacaoTomador><CpfCnpj><Cpf>12345678901</Cpf></CpfCnpj></IdentificacaoTomador><RazaoSocial>INSCRICAO DE TESTE E TESTE</RazaoSocial><Endereco><Endereco>RUA PRINCIPAL</Endereco><Numero>100</Numero><Complemento>APTO 11</Complemento><Bairro>CENTRO</Bairro><CodigoMunicipio>3550407</CodigoMunicipio><Uf>SP</Uf><Cep>14800000</Cep></Endereco><Contato><Telefone>22223333</Telefone><Email>[email protected]</Email></Contato></Tomador><RegimeEspecialTributacao>1</RegimeEspecialTributacao><OptanteSimplesNacional>1</OptanteSimplesNacional><IncentivoFiscal>2</IncentivoFiscal></InfDeclaracaoPrestacaoServico></Rps></ListaRps></LoteRps><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></SignatureMethod><Reference URI="#Lote_1"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod><DigestValue>rX3CEr7ijxS0tABSjAwMEoaFevc=</DigestValue></Reference></SignedInfo><SignatureValue>PBm9axx01s6rRYSpFcfEkv1SWcjYEXoM69PhQXgnoOQCGdwRhlNF3Grs02NgviSTiPqhKOap47hPCnnyqN1MbXohKDR1Bv9U7Qtioj/9aqRFmypMBpAIBb8+f2m1wX+hrY0t5AqeMkFOF6oaUJtSl0kvf5k5CQZzZCxS7DMmJKoV0U7a7sWV4G+YwPfORcxeDeeDOtCHFlwepWxckOmid716twJUCktid+WM8RcsTWvRlCCc9BLxpgnfUhk/+Qpblt94obNmZRkGafhEDhbV4MCAJfQTeEm+iISnyuBUm27ejk/o8YzAq58/ag+vMiOBfYWRaX7AiYoegzg2LgqflQ==</SignatureValue><KeyInfo><X509Data><X509Certificate>sqaRGRVTBt1ER</X509Certificate></X509Data></KeyInfo></Signature></EnviarLoteRpsSincronoEnvio>]]>
            </tem:xmlEnvio>
        </tem:EnviarLoteRpsSincrono>
    </soapenv:Body>
</soapenv:Envelope>

Em anexo um exemplo de RPS
1-env-lot-sinc.xml (4,8,KB)

Luiz,

Obrigado pela ajuda.

Além de adicionar o CData tive que remover o xmlns=“http://www.abrasf.org.br/nfse.xsd” de dentro do XML.

Abraço.
Renato

1 curtida