2013-05-14 2 views
0

У меня проблема с моим клиентом android, пытающимся опубликовать класс JSON для моей службы wcf. ФОС получает пост, а параметр является нулевымAndroid отправляет объект JSon в 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 равно нулю)

[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

Вы посмотрели, что происходит через провод, может быть, с fidler? – Jbecwar

+0

Я пробовал, но я не могу видеть сообщение на нем. – Fabio

ответ

1

Имя параметра в вашей операции (с телом WrappedRequest) является dadosUsuario. В JSON, который вы создаете в коде Android, имя свойства: DadosUsuario. Случай важен - попробуйте изменить его на dadosUsuario (или изменив имя параметра в операции, чтобы иметь свой первый символ в верхнем регистре), и он должен работать.

На несвязанной ноте - вам не нужно указывать свойство Name на атрибутах [DataMember], так как они имеют то же имя, что и свойства класса. Это не больно.

+0

Я сделал это, но проблема не устранена. Теперь оба являются dadosUsuario. Любая другая идея, я искал все вопросы WCF здесь. Не повезло до сих пор. – Fabio

+0

Сейчас работает! Я забыл: [OperationContract] строка ArqInfoAndroid (WCFService.UploadService.DadosUsu DadosUsuario); – Fabio

Смежные вопросы