Upload
richard-villalba
View
8
Download
0
Embed Size (px)
DESCRIPTION
Consumo de Datos
Citation preview
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 1
Módulo 4:
Consumo de Datos
WebClient
devmasters.com.mx
WebClient
� Clase de uso sencillo para comunicaciones HTTP
� Soporta GET y POST únicamente
� Usa el paradigma de programación basada en eventos
� Regresa los resultados en el hilo de la IU
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 2
devmasters.com.mx
WebClient
�Miembros
� BaseAddress
� DownloadProgressChanged
� Regresa los datos en el hilo de la IU
HTTP GET
• DownloadStringAsync
• OpenReadAsync
HTTP POST
• UploadStringAsync
• OpenWriteAsync
devmasters.com.mx
WebClient
� Método DownloadStringAsync
� Descarga como texto plano el Uri especificado
� Es asíncrono
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
string result = a.Result;
//Interpreta el resultado
}
};
client.DownloadStringAsync(new Uri("http://whc.unesco.org/en/list/rss", UriKind.Absolute));
devmasters.com.mx
WebClient
� Método OpenReadAsync
� Abre el Uri especificado como un Stream de lectura
� Es asíncrono
WebClient client = new WebClient();
client.OpenReadCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
Stream result = a.Result;
//Interpreta el resultado
}
};
client.OpenReadAsync(new Uri("http://upload.wikimedia.org/wikipedia/en/d/db/Silverlight.png",
UriKind.Absolute));
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 3
devmasters.com.mx
WebClient
� Propiedad BaseAddress
� Establece el Uri base para todas las peticiones en el WebClient
WebClient client = new WebClient();
client.BaseAddress = @"http://upload.wikimedia.org";
client.OpenReadCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
Stream result = a.Result;
//Interpreta el resultado
}
};
client.OpenReadAsync(new Uri("/wikipedia/en/d/db/Silverlight.png", UriKind.Relative));
devmasters.com.mx
WebClient
� DownloadProgressChanged
� Se dispara cuando los datos son transferidos asíncronamente
WebClient client = new WebClient();
client.DownloadProgressChanged += (s, a) =>
{
textBlock1.Text =
a.BytesReceived.ToString();
};
devmasters.com.mx
WebClient
� OpenWriteAsync
� Abre un Stream para escritura
WebClient client = new WebClient();
client.OpenWriteCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
Stream result = a.Result;
StreamWriter writer = new StreamWriter(result);
writer.WriteLine("Prueba");
writer.Close();
}
else
{
MessageBox.Show(a.Error.ToString());
}
};
client.OpenWriteAsync(new Uri("/Handler1.ashx", UriKind.RelativeOrAbsolute));
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 4
devmasters.com.mx
WebClient
� Headers
� Permite establecer los headers para la petición
� Algunos headers están restringidos
Demo: WebClient
HttpClient Portable
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 5
devmasters.com.mx
HttpClient Portable
� API más simple y moderna de comunicación para aplicaciones� Más intuitiva
� Los métodos que expone son los verbos del protocolo HTTP� Asíncrona por medio de async/await� Disponible para:
� .NET Framework 4.5/4.0
� Aplicaciones Metro de Windows 8� Windows Phone 7.1
� Windows Phone 8
� Bibliotecas de Clases Portables
devmasters.com.mx
HttpClient Portable
� Permite reutilizar la lógica de comunicaciones entre aplicaciones de Windows Phone 8 y Windows 8
Lógica de comunicación
Windows Phone 8 Windows 8
Demo: HttpClient Portable
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 6
HttpWebRequest / HttpWebResponse
devmasters.com.mx
HttpWebRequest / HttpWebResponse
� Te permiten tener más control en la comunicación
� Por ejemplo: cambiar el response, los headers, el StatusCode, el
ContentType y el Stream
� Regresa los datos en un hilo secundario, no en el de la IU
� Podemos usar el objeto Dispatcher para comunicarnos al hilo de la IU
� Puedes usar el modelo tradicional de programación asíncrona con IAsyncResult
devmasters.com.mx
HttpWebRequest / HttpWebResponseHttpWebRequest req = HttpWebRequest.CreateHttp(new Uri("http://localhost:3398/Handler1.ashx",
UriKind.Absolute)); req.Method = "POST";
req.ContentType = "text/plain";
req.BeginGetRequestStream(result =>
{
var requestStream = req.EndGetRequestStream(result);
requestStream.Close();
req.BeginGetResponse(r =>
{
var response = (HttpWebResponse)req.EndGetResponse(r);
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
string responseString = reader.ReadToEnd();
Dispatcher.BeginInvoke(() => textBlock1.Text = responseString);
reader.Close();
}
stream.Close();
}
}, null);
}, null);
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 7
Demo: HttpWebRequest / HttpWebResponse
Comunicación a Servicios WCF
devmasters.com.mx
Comunicación a Servicios WCF
� Opciones
� Agregar Referencia al Servicio
� Clase ChannelFactory
� Clase ClientBase
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 8
devmasters.com.mx
Comunicación a Servicios WCF
� Los proyectos de Windows Phone 8
soportan “Agregar Referencia a Servicio"
� Funciona con Servicios
ASMX y WCF
� Visual Studio genera las clases Proxy y DataContract
devmasters.com.mx
Comunicación a Servicios WCF
� Todas las comunicaciones son asíncronas
� Al agregar la referencia al Servicio se creará la clase Proxy
� Los métodos en las clases Proxy y DataContract tendrán el fijo «Async»ServiceReference1.EjemploSoapClient client = new
ServiceReference1.EjemploSoapClient();
client.SaludaCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
MessageBox.Show(a.Result);
}
};
client.SaludaAsync(textBox1.Text);
devmasters.com.mx
Comunicación a Servicios WCF
� Al agregar la referencia del Servicio, se creará automáticamente el archivo de configuración
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="EjemploSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:6090/Ejemplo.asmx" binding="basicHttpBinding"
bindingConfiguration="EjemploSoap" contract="ServiceReference1.EjemploSoap"
name="EjemploSoap" />
</client>
</system.serviceModel>
</configuration>
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 9
devmasters.com.mx
Comunicación a Servicios WCF
� La instancia del Proxy utilizará la configuración predeterminada
� De manera opcional, podemos establecer el tipo de Binding y EndpointAddress
� Para escenarios de direcciones dinámicas
…
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new
EndpointAddress("http://api.bing.net:80/soap.asmx");
client = new Bing.BingPortTypeClient(binding, address);
devmasters.com.mx
Comunicación a Servicios WCF
� Puedes tener tus propias clases de Modelo
� Puedes utilizar LINQ para proyectar
� Permite una independencia entre las diferentes capas
Demo: Comunicación a Servicios WCF
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 10
Comunicación a Servicios REST
devmasters.com.mx
Comunicación a Servicios REST
� REREREREpresentational SSSState TTTTransfer (REST)
� Exponen una estructura de tipo URI� Las operaciones CRUD están mapeadas a los métodos HTTP:
� POST: Crear
� GET: Leer
� PUT: Actualizar
� DELETE: Borrar
� No guardan el estado� El formato de datos es texto plano
� JSON o XML
devmasters.com.mx
Comunicación a Servicios REST
� Opciones
� HttpClient
� HttpWebRequest / HttpWebResponse
� WebClient
� WCF Data Services
� Exponen un modelo de entidades como un servicio REST
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 11
Demo: Comunicación a Servicios REST
Windows Azure Mobile Services
devmasters.com.mx
Mobile Services
� Almacenamiento en la
nube para aplicaciones móviles de Azure
� Permite escribir lógica del lado del servidor
� Multi-plataforma
� …y más!
� Prueba de 1 mes gratuita:
http://www.windowsazure.com/en-us/pricing/free-trial/
Diplomado de Windows Phone 8 devmasters.com.mx
Este documento se distribuye con una licencia de tipo Atribución-CompartirIgual 3.0 Unported. Para más información consulta http://creativecommons.org/licenses/by-sa/3.0/deed.es
Microsoft, el logo .NET, Silverlight, Visual Studio, Expression Blend, Expression Studio, ASP.NET, SharePoint y Windows Phone son marcas registradas del grupo de compañías Microsoft. 12
Demo: Windows Azure Mobile Services
Resumen
¿Preguntas?