0

我的 android 客户端尝试将 JSON 类发布到我的 wcf 服务时遇到问题。wcf正在接收post,但参数为null

这是android客户端的代码:

private void EnviaDados( DadosUsuario usuario, String fileName, String pAssunto, String pComentario, String pOnde, String pQuando ) throws Exception
{

    fileName = fileName.substring( fileName.indexOf("$$$")+3 , fileName.length() );
    fileName = fileName.substring( 0, fileName.indexOf("$$$") );

    HttpClient httpClient = new DefaultHttpClient();
    String url = "http://192.168.1.112/WCF2/UploadService.svc/REST/ArqInfoAndroid";

    String pNome = usuario.RetornaDados()[0];
    String pDDD = usuario.RetornaDados()[1];
    String pTelefone = usuario.RetornaDados()[2];
    String pEmail = usuario.RetornaDados()[3];
    String pRegiao = usuario.RetornaDados()[4];

    try {

        URI uri = new URI(url);

        HttpPost postRequest = new HttpPost(uri);

        StringEntity se = new StringEntity(retornaJson(pNome, pEmail, pDDD,pTelefone, pRegiao, fileName, pComentario, pOnde, pAssunto, pQuando).toString());

        postRequest.setEntity(se);

        postRequest.setHeader("Accept", "application/json");
        postRequest.setHeader("Content-type", "application/json;");

        HttpResponse response = httpClient.execute(postRequest);

        int staCode = response.getStatusLine().getStatusCode(); 

        if (staCode == 200 || staCode == 400) {

            InputStream instream = response.getEntity().getContent();
                String res = convertStreamToString(instream);

                if(res.contains(("FALHA")))
                {
                    throw new Exception("Falha ao enviar arquivo"); 
                }

        } 

    } catch (UnsupportedEncodingException e) {
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    } catch (URISyntaxException e){ 
    } 

}


public  JSONStringer retornaJson(String nome, String email, String ddd, String telefone, String regiao, String arquivo, String comentario, String onde, String assunto, String quando)
{
     JSONStringer DadosUsu = new JSONStringer();
     try
     {
          DadosUsu.object()
                 .key("DadosUsuario").object().key("Nome")
                 .value(nome).key("Email")
                 .value(email).key("DDD")
                 .value(ddd).key("Telefone")
                 .value(telefone).key("Regiao")
                 .value(regiao).key("NomeArq")
                 .value(arquivo).key("Comentario")
                 .value(comentario).key("Onde")
                 .value(onde).key("Assunto")
                 .value(assunto).key("Quando")
                 .value(quando).endObject().endObject();

     }
     catch (Exception je)
     {                                                                                                                                                                                                                                                                                                                           
     }  

     return DadosUsu;
}

这是 Wcf的代码(参数 dadosUsuario 为空)

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "ArqInfoAndroid")]
    public string ArqInfoAndroid(DadosUsu dadosUsuario)
    {

        EscreverNoLog("Recebendo dados usuário Android");

        try
        {

            string absFileName = string.Format("{0}\\FileUpload\\{1}"
                                    , AppDomain.CurrentDomain.BaseDirectory
                                    , dadosUsuario.NomeArq);


            GerenciaThread pTh = new GerenciaThread();


            EscreverNoLog("Recebendo dados usuário Android: " +
                            dadosUsuario.Nome + " - " +
                            dadosUsuario.Email + " - " +
                            dadosUsuario.DDD + " - " +
                            dadosUsuario.Telefone + " - " +
                            dadosUsuario.Regiao + " - " +
                            absFileName + " - " +
                            dadosUsuario.Comentario + " - " +
                            dadosUsuario.Onde + " - " +
                            dadosUsuario.Assunto + " - " +
                            DateTime.ParseExact(dadosUsuario.Quando, "dd/MM/yyyy", null));
            pTh.ChamarThread(dadosUsuario.Nome, dadosUsuario.Email, dadosUsuario.DDD, dadosUsuario.Telefone, dadosUsuario.Regiao, absFileName, dadosUsuario.Comentario, dadosUsuario.Onde, dadosUsuario.Assunto, DateTime.ParseExact(dadosUsuario.Quando, "dd/MM/yyyy", null));

            return "OK";
        }
        catch (Exception ex)
        {
            EscreverNoLog("Erro recebimento dos dados usuário Android");
            EscreverNoLog("Mensagem de Erro recebimento dos dados usuário Android: " + ex.Message);
            return "FALHA: " + ex.Message;
        }



    }

    public class DadosUsu
    {
        private string nome;
        private string email;
        private string ddd;
        private string telefone;
        private string regiao;
        private string nomearq;
        private string comentario;
        private string onde;
        private string assunto;
        private string quando;


       [DataMember(Name="Nome")]
        public string Nome
        {
            get { return nome; }
            set { nome = value; }
        }

        [DataMember(Name="Email")]
        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        [DataMember(Name="DDD")]
        public string DDD
        {
            get { return ddd; }
            set { ddd = value; }
        }

        [DataMember(Name="Telefone")]
        public string Telefone
        {
            get { return telefone; }
            set { telefone = value; }
        }

        [DataMember(Name="Regiao")]
        public string Regiao
        {
            get { return regiao; }
            set { regiao = value; }
        }

        [DataMember(Name="NomeArq")]
        public string NomeArq
        {
            get { return nomearq; }
            set { nomearq = value; }
        }


        [DataMember(Name="Comentario")]
        public String Comentario
        {
            get { return comentario; }
            set { comentario = value; }
        }


        [DataMember(Name="Onde")]
        public string Onde
        {
            get { return onde; }
            set { onde = value; }
        }

        [DataMember(Name="Assunto")]
        public string Assunto
        {
            get { return assunto; }
            set { assunto = value; }
        }

        [DataMember(Name="Quando")]
        public string Quando
        {
            get { return quando; }
            set { quando =  value; }
        }


    }
4

1 回答 1

1

您的操作中的参数名称(带有 body style WrappedRequest)是dadosUsuario。在您在 Android 代码中创建的 JSON 中,属性的名称是DadosUsuario。大小写很重要 - 尝试将其更改为dadosUsuario(或更改操作中的参数名称以使其第一个字符为大写),它应该可以工作。

在不相关的注释上 - 您不需要在Name属性上指定[DataMember]属性,因为它们与类的属性同名。不过,它不疼。

于 2013-05-14T22:13:16.423 回答