none
WebService + JSON + AspNet RRS feed

  • Pergunta

  • Boa tarde a todos,

    Preciso de uma ajuda para saber por onde devo estudar para fazer o que preciso.

    Estou desenvolvendo um sistema web, usando asp.net framework 4.0 e visual studio 2012.

    Preciso fazer um webservice ou algo que fique rodando o tempo todo no navegador, esse site será acessado tanto por computadores quanto por celulares e (android, ios)...

    Esse web service vai ficar buscando dados de uma tabela e quero que salve um JSON, o meu site com essas informações do JSON vai criar graficos, isso via javascript.

    Com isso quero que mesmo que o usuário acesse o site sem conexão com a internet ele fique salvo a última busca a esses dados e o usuário consiga acessar esses dados.

    Não sei se consegui explicar certo,

    Mas alguém saberia me disser se isso é possível?
    E o que devo procurar e estudar para realizar isso? 

    Obrigado a todos.

    • Editado Rafael_CC quinta-feira, 24 de abril de 2014 19:59
    quinta-feira, 24 de abril de 2014 19:59

Respostas

  • Bom dia,

    Quanto a minha outra dúvida, eu não conseguiria criar pasta e salvar arquivos no android e nem no IOS. Junto com a empresa chegamos a outra solução.

    A pedido dos responsáveis pelo protótipo, criamos cookies com esses dados que uso para criar as colunas do gráficos. Caso seja útil para alguém alguma parte do código, segue o método abaixo:

    [DllImport("wininet.dll")]
            private extern static Boolean InternetGetConnectedState(out int Description, int ReservedValue);
    
            /// <summary>
            /// Método para verificar se existe conectividade com a Internet.
            /// </summary>
            /// <returns>True / False</returns>
            public static Boolean IsConnected()
            {
                int Description;
                return InternetGetConnectedState(out Description, 0);
            }
    
            /// <summary>
            /// WebMethod  que carrega os dados da coluna X, chamado via Json.
            /// </summary>
            /// <returns>Lista</returns>
            [WebMethod()]
            public static ArrayList CarregaDadosX()
            {
                ArrayList lista = new ArrayList();
    
                //Verifica conectividade com a internet.
                if (!IsConnected())
                {
                    #region Rotina para computador sem conexão com a internet.
    
                    string recebeCookie = HttpContext.Current.Request.Cookies.Get("CookieTeste").Value;
    
                    if (!string.IsNullOrEmpty(recebeCookie))
                    {
                        string[] valores = recebeCookie.Replace("\"", "").Split(',');
                        foreach (string item in valores)
                        {
                            string valorParaAdicionar = string.Empty;
                            if (item.Contains('['))
                            {
                                valorParaAdicionar = item.Replace("[", "");
                            }
                            else if (item.Contains(']'))
                            {
                                valorParaAdicionar = item.Replace("]", "");
                            }
                            else
                            {
                                valorParaAdicionar = item;
                            }
                            lista.Add(valorParaAdicionar);
                        }
                    }
    
                    return lista;
                    #endregion
                }
                else
                {
                    #region Rotina para computador conectado a internet.
    
                    Uri uri = new Uri(@"http://localhost/Teste/Teste.svc/CarregaDadosX");
                    WebRequest webRequest = WebRequest.Create(uri);
                    WebResponse response = webRequest.GetResponse();
                    StreamReader streamReader = new StreamReader(response.GetResponseStream());
                    string responseData = streamReader.ReadToEnd();
                    string linha = responseData.Substring(24, 253);
    
                    string[] valores = linha.Replace("\"", "").Split(',');
                    foreach (string item in valores)
                    {
                        lista.Add(item);
                    }
    
                    //Converter ArrayList para JSON.
                    var jsonSerialiser = new JavaScriptSerializer();
                    var json = jsonSerialiser.Serialize(lista);
    
                    //Cria cookie e adiciona data para expirar.
                    HttpCookie cookie = new HttpCookie("Teste", json);
                    TimeSpan somarTempo = new TimeSpan(2, 0, 0, 0);
                    cookie.Expires = DateTime.Now + somarTempo;
                    HttpContext.Current.Response.AppendCookie(cookie);
    
                    return lista;
    
                    #endregion
                }            
            }
    Criei um método para verificar se existe conexão com a internet e conforme a regra de negócio do método uso o cookie que foi criado.

    Dessa forma e usando os métodos acima de ajax, consigo recuperar os dados conforme preciso.

    Agradeço a ajuda de todos.

    • Marcado como Resposta Rafael_CC quinta-feira, 15 de maio de 2014 14:50
    quarta-feira, 14 de maio de 2014 12:55

Todas as Respostas

  • Bom dia Rafael

    Realmente ficou meio confusa sua explicação, da uma olhada nesse link e veja se te ajuda.

    http://www.codeproject.com/Tips/397574/Use-Csharp-to-get-JSON-Data-from-the-Web-and-Map-i

    • Sugerido como Resposta Giovani Cr segunda-feira, 28 de abril de 2014 16:25
    sexta-feira, 25 de abril de 2014 14:44
  • Bom dia Rafael,

    Conseguiu resolver?

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 28 de abril de 2014 16:24
  • Bom dia a todos, na semana passada não consegui realizar os testes desse serviço.

    Vou realizar todos os testes essa semana.

    Obrigado pela dica, entro em contato retornando se deu certo.

    terça-feira, 29 de abril de 2014 11:20
  • Boa tarde a todos,

    Consegui resolver em partes minha dúvida.

    1- Criei um serviço com WCF no VS2013. O método desse serviço retorna um ArrayList.

    2- Na minha aplicação como preciso preencher o gráfico via javascrip fiz uma requisição ajax, conforme exemplo abaixo:

    $(function () {
        $.ajax({
            type: "POST",
            url: "Teste.aspx/CarregaDadosX",
            //url: "http://localhost/Teste/TesteWCF.svc/CarregaDadosX/",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (dadosX) {
                if (dadosX.d) {

    3 - Essa requisição chama um método na minha página, e esse método realiza uma requisição ao meu serviço conforme abaixo:

    Uri uri = new Uri(@"http://localhost/Teste/TesteWCF.svc/CarregaDadosX");
                        WebRequest webRequest = WebRequest.Create(uri);
                        WebResponse response = webRequest.GetResponse();
                        StreamReader streamReader = new StreamReader(response.GetResponseStream());
                        string responseData = streamReader.ReadToEnd();

    Com isso a string "responseData" vem com o json que eu fiz a solicitação no meu serviço, passando da forma abaixo no meu Contrato:

    [OperationContract]
            [WebInvoke(UriTemplate = "CarregaDadosX",
            Method = "GET",
            BodyStyle = WebMessageBodyStyle.Wrapped,
            ResponseFormat = WebMessageFormat.Json)]
            ArrayList CarregaDadosX();

    Até ai consegui resolver meu problema parcialmente.

    Esse meu site será na maioria das vezes acessado via mobile com Android e IOS.

    Eu preciso agora salvar um arquivo .txt no meu aparelho Android e IOS.

    Qual pasta da raiz posso salvar esse arquivo para os dois sistemas operacionais mobile?

    Qual o caminho que devo colocar para que ele crie esse arquivo?

    Obrigado a todos e fica essa resposta como auxilio para outras criações até onde fiz.


    • Editado Rafael_CC quarta-feira, 7 de maio de 2014 17:40
    quarta-feira, 7 de maio de 2014 17:39
  • Rafael,

    Você tem que usar um Window Service que consome o WebService, entendeu?

    A minha dica é: deixe na sua máquina um windows service executando de tempos em tempos consumindo o ws e inserindo no banco de dados as informações que acha melhor.

    Qualquer coisa só falar.


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    quarta-feira, 7 de maio de 2014 21:03
  • Bom dia,

    Quanto a minha outra dúvida, eu não conseguiria criar pasta e salvar arquivos no android e nem no IOS. Junto com a empresa chegamos a outra solução.

    A pedido dos responsáveis pelo protótipo, criamos cookies com esses dados que uso para criar as colunas do gráficos. Caso seja útil para alguém alguma parte do código, segue o método abaixo:

    [DllImport("wininet.dll")]
            private extern static Boolean InternetGetConnectedState(out int Description, int ReservedValue);
    
            /// <summary>
            /// Método para verificar se existe conectividade com a Internet.
            /// </summary>
            /// <returns>True / False</returns>
            public static Boolean IsConnected()
            {
                int Description;
                return InternetGetConnectedState(out Description, 0);
            }
    
            /// <summary>
            /// WebMethod  que carrega os dados da coluna X, chamado via Json.
            /// </summary>
            /// <returns>Lista</returns>
            [WebMethod()]
            public static ArrayList CarregaDadosX()
            {
                ArrayList lista = new ArrayList();
    
                //Verifica conectividade com a internet.
                if (!IsConnected())
                {
                    #region Rotina para computador sem conexão com a internet.
    
                    string recebeCookie = HttpContext.Current.Request.Cookies.Get("CookieTeste").Value;
    
                    if (!string.IsNullOrEmpty(recebeCookie))
                    {
                        string[] valores = recebeCookie.Replace("\"", "").Split(',');
                        foreach (string item in valores)
                        {
                            string valorParaAdicionar = string.Empty;
                            if (item.Contains('['))
                            {
                                valorParaAdicionar = item.Replace("[", "");
                            }
                            else if (item.Contains(']'))
                            {
                                valorParaAdicionar = item.Replace("]", "");
                            }
                            else
                            {
                                valorParaAdicionar = item;
                            }
                            lista.Add(valorParaAdicionar);
                        }
                    }
    
                    return lista;
                    #endregion
                }
                else
                {
                    #region Rotina para computador conectado a internet.
    
                    Uri uri = new Uri(@"http://localhost/Teste/Teste.svc/CarregaDadosX");
                    WebRequest webRequest = WebRequest.Create(uri);
                    WebResponse response = webRequest.GetResponse();
                    StreamReader streamReader = new StreamReader(response.GetResponseStream());
                    string responseData = streamReader.ReadToEnd();
                    string linha = responseData.Substring(24, 253);
    
                    string[] valores = linha.Replace("\"", "").Split(',');
                    foreach (string item in valores)
                    {
                        lista.Add(item);
                    }
    
                    //Converter ArrayList para JSON.
                    var jsonSerialiser = new JavaScriptSerializer();
                    var json = jsonSerialiser.Serialize(lista);
    
                    //Cria cookie e adiciona data para expirar.
                    HttpCookie cookie = new HttpCookie("Teste", json);
                    TimeSpan somarTempo = new TimeSpan(2, 0, 0, 0);
                    cookie.Expires = DateTime.Now + somarTempo;
                    HttpContext.Current.Response.AppendCookie(cookie);
    
                    return lista;
    
                    #endregion
                }            
            }
    Criei um método para verificar se existe conexão com a internet e conforme a regra de negócio do método uso o cookie que foi criado.

    Dessa forma e usando os métodos acima de ajax, consigo recuperar os dados conforme preciso.

    Agradeço a ajuda de todos.

    • Marcado como Resposta Rafael_CC quinta-feira, 15 de maio de 2014 14:50
    quarta-feira, 14 de maio de 2014 12:55