Usuário com melhor resposta
WebService + JSON + AspNet

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
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
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
-
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. -
-
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
-
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 -
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