none
Problemas com WebClient.UploadData RRS feed

  • Pergunta

  • Olá, estou tentando consumir um web-service usando a biblioteca WebClient , porém ao invocar o WebClient.UploadData ele me retorna um 404 NOT FOUND.

    Ao invocar o serviço estou encaminhando um json serializado abaixo segue a descrição do serviço.

    public ESys.Intranet.Domain.Types.voConsumerIntegrate CommunicateService(ESys.Intranet.Domain.Types.voConsumer consumer)
            {
                try
                {
                    
                    using (var connection = new ESys.Intranet.Infra.DapperContext().Connection)
                    {
                        WebClient client = new WebClient();
                        // serialize the object data in json format
                        MemoryStream ms = new MemoryStream();
                        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ESys.Intranet.Domain.Types.voConsumerIntegrate));
                        StringBuilder sql = new StringBuilder();
                        sql.Append(" select cb.pk_codigo as idInstalacaoActo from ConsumerComplement as cc ");
                        sql.Append(" inner join ConsumerBuilding as cb on cc.FKCONSUMERID = CB.fk_consumer ");
                        sql.Append(" where cc.NRO_PFJ = @NRO_PFJ and cb.ativo = 1 ");
                        var jsonSerialido = JsonConvert.SerializeObject(new ESys.Intranet.Domain.Types.voConsumerIntegrate
                        {
                            atividadeEconomica = consumer.ConsumerComplement.ATIVIDADE_ECON,
                            bairro = consumer.ConsumerComplement.BAIRRO_LOGRADOURO,
                            cep = consumer.ConsumerComplement.CEP_LOGRADOURO,
                            cidade = consumer.consumerCity,
                            cnpj = consumer.ConsumerComplement.CNPJ_PFJ,
                            codigoCbo = consumer.ConsumerComplement.CBO_PRINCIPAL,
                            codigoCnae = Convert.ToInt32(consumer.ConsumerComplement.CNAE_PRINCIPAL),
                            complemento = consumer.ConsumerComplement.COMPL_LOGRADOURO,
                            cpf = consumer.ConsumerComplement.CPF_PFJ,
                            digitoCnpj = consumer.ConsumerComplement.CNPJ_DIG_PFJ,
                            digitoCpf = consumer.ConsumerComplement.CPF_DIG_PFJ,
                            idBairro = consumer.ConsumerComplement.IDDistrict,
                            idEmpresaActo = consumer.ConsumerID,
                            idInstalacaoActo = connection.Query<ESys.Intranet.Domain.Types.Mobile.Android.voConsumerIntegrate>(sql.ToString(), 
                            new { NRO_PFJ = consumer.ConsumerComplement.NRO_PFJ }).FirstOrDefault().idInstalacaoActo,
                            idRua = consumer.ConsumerComplement.IDStreet,
                            inscricaoMunicipal = consumer.InscricaoMunicipal.HasValue ? consumer.InscricaoMunicipal.Value : 0,
                            nome = consumer.Name,
                            numero = consumer.ConsumerComplement.NUM_LOGRADOURO,
                            numeroAlvara = consumer.ConsumerComplement.NRO_ALVARA,
                            numeroPfj = consumer.ConsumerComplement.NRO_PFJ,
                            razaoSocial = consumer.ConsumerComplement.NOME_FANTASIA_PFJ,
                            rua = consumer.ConsumerComplement.NOM_LOGRADOURO,
                            siglaLogradouro = consumer.ConsumerComplement.SIG_LOGRADOURO,
                            situacaoAlvara = consumer.ConsumerComplement.SITUACAO_ALVARA,
                            restricoesAlvara = consumer.ConsumerComplement.RESTRICOES_ALVARA,
                            tipoAlvara = consumer.ConsumerComplement.TIPO_ALVARA,
                            validadeAlvara = consumer.ConsumerComplement.VALIDADE_ALVARA,
                            finalidadeAlvara = consumer.ConsumerComplement.FINALIDADE_ALVARA
                        });
                        ser.WriteObject(ms, jsonSerialido);
                        var teste = ms.ToArray();
                        // invoke the REST method
                        //Insert
                        //client.Headers["Content-type"] = "application/json";
                        client.Headers.Add("Accept", "application/json");
                        client.Headers.Add("Content-Type", "application/json");
                        byte[] data = client.UploadData("http://ec2-54-197-246-218.compute-1.amazonaws.com/api/empresas/createEmpresaOficial/", "POST", ms.ToArray());
                        // put the downloaded data in a memory stream
                        ms = new MemoryStream(data);
                        return new ESys.Intranet.Domain.Types.voConsumerIntegrate
                        {
                            erro = false,
                            mensagemErro = String.Empty
                        };
                    }
                }
                catch (Exception ex)
                {
                    return new ESys.Intranet.Domain.Types.voConsumerIntegrate
                    {
                        erro = true,
                        mensagemErro = String.Format("Erro de comunicacao com service rails  : {0}", ex.Message)
                    };
                }
            }

    Eu criei um serviço de teste e o subi ele explode o erro quando tento chamá-lo:

    Quando testo com qualquer aplicação para envio de http ele me retorna Ok, quando uso o webClient ele me retorna NOT FOUND

    segunda-feira, 24 de novembro de 2014 13:20

Respostas

  • Problema foi resolvido o formato do array de bytes estava errado.

    byte[] byteArray = Encoding.ASCII.GetBytes(jsonSerialido);
                        byte[] data = client.UploadData("http://ec2-54-197-246-218.compute-1.amazonaws.com/api/empresas/createEmpresaOficial/", "POST", byteArray);

    Esse é o formato correto

    • Marcado como Resposta marcusfcbarbosa segunda-feira, 24 de novembro de 2014 13:30
    segunda-feira, 24 de novembro de 2014 13:30