2013-05-14 38 views
0

我的Android客戶端嘗試將JSON類發佈到我的wcf服務時出現問題。 WCF是接收柱,但參數爲空Android將JSon對象發佈到WCF接收null

這裏是Android客戶端的代碼:對WCF

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; 
} 

這裏是代碼(參數dadosUsuario爲null)

[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; } 
     } 


    } 
+0

你看過什麼電線,可能與小提琴手? – Jbecwar 2013-05-14 18:29:28

+0

我試過但我看不到它的帖子。 – Fabio 2013-05-14 19:13:21

回答

1

您的操作中的參數名稱(與主體樣式WrappedRequest)是dadosUsuario。在Android代碼中創建的JSON中,該屬性的名稱是DadosUsuario。這種情況很重要 - 請嘗試將其更改爲dadosUsuario(或更改操作中的參數名稱以使其大寫的第一個字符),並且它應該起作用。

在不相關的說明上 - 您不需要在[DataMember]屬性上指定Name屬性,因爲它們與該類的屬性名稱相同。儘管如此,它並沒有受到傷害。

+0

我做到了,但問題依然存在。現在都是dadosUsuario。任何其他的想法,我已經在這裏搜索所有WCF的問題..迄今沒有運氣 – Fabio 2013-05-15 00:05:35

+0

它現在的工作!我忘了:[OperationContract] 字符串ArqInfoAndroid(WCFService.UploadService.DadosUsu DadosUsuario); – Fabio 2013-05-15 00:29:18