30

Alejandro Mezcua MVP Device Application Development [email protected]

Embed Size (px)

Citation preview

Page 1: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 2: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Alejandro MezcuaMVP Device Application Developmenthttp://www.byteabyte.net/[email protected]

Page 3: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Direccionamiento de un dispositivoCambia entre muchas redesCambia de direcciones

Conectado ocasionalmenteSe puede apagarZonas de no cobertura

¿Cómo enviar y recibir mensajes en esta situación?

Page 4: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Para el direccionamiento de un dispositivo

Usar una dirección independiente de la conexión (email)

Para las conexiones ocasionalesAlmacenar los mensajes en un sitio accesible

Page 5: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Estos requisitos los cumple Microsoft Exchange 2007

Direcciones de email por usuarioBuzones para el almacenamiento temporal de los mensajesConectividad por diversos medios

Page 6: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Comunicación asíncrona por naturaleza

No se puede saber¿Cuándo llega un mensaje?¿Se ha recibido?

Diseñar las aplicaciones con esto en mente

Page 7: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Transportes WCF (Windows Communication Foundation) que aprovechan Microsoft Exchange Server 2007

Versión para PCVersión para Windows MobileDesarrollados en conjunto por el equipo de Exchange y el de .NET Compact Framework

Page 8: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Existe transporte para servicios Web WCF

Se pueden crear nuevos transportes en la infraestructura de WCF

Page 9: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Windows MobileWindowsMobileMailBinding

PCsExchangeWebServiceMailBinding

Incluido con .NET Compact Framework 3.5 SDK

Page 10: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Usa la conexión de ActiveSyncSi ActiveSync está conectado al PC, conecta directamenteSi se ha configurado AUTD (Always Up To Date) se realiza la sincronización al llegar nuevos elementos

Page 11: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Usa Exchange Web ServicesCada cierto tiempo (configurable) conecta con el servidor para ver si hay nuevos mensajes (POLL)

Page 12: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

La comunicación ha de ir codificadaConexiones https

ActiveSync usa https

Los equipos han de confiar en el emisor del certificado

Si no se verifica el código genera excepciones

Page 13: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Un mensaje se envía a una dirección de email y a un canal (identificador texto)

Esto permite disponer de varias aplicaciones usadas desde la misma dirección de email (con diferentes canales)

Equivalente a direcciónIP:Puerto

Page 14: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Un mensaje es una objeto serializado a Xml

Se definen las clases como serializablesEs necesario definir un serializador para establecer cómo se crea el Xml a partir de la clase

Clase que herede de XmlObjectSerializer

Suele bastar con serialización simpleSe pueden compartir entre proyectos PC y .NET CF

Los dos han de entender los mismos mensajes

Page 15: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

WindowsMobileMailBinding o ExchangeWebServiceMailBinding dependiendo del caso

Se usará tanto para enviar como para recibir mensajes.

_binding = new WindowsMobileMailBinding();_binding.AcceptExistingMessages = true;…_binding = new ExchangeWebServiceMailBinding( new Uri(_exchangeServerUrl), new System.Net.NetworkCredential(_exchangeServerMailbox,

_exchangeServerPassword) );

Page 16: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Necesario para enviar mensajesMismo código en PC y Compact Framework

BindingParameterCollection parameters = new BindingParameterCollection();_channelFactory = _binding.BuildChannelFactory<IOutputChannel>(parameters);_channelFactory.Open();

_outChannel = _channelFactory.CreateChannel( new System.ServiceModel.EndpointAddress(

MailUriHelper.CreateUri(_channelName, _email))

);_outChannel.Open();

Page 17: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

SimpleObjectSerializer serializer = new SimpleObjectSerializer(typeof(ObjetoAEnviar));

System.ServiceModel.Channels.Message msg = System.ServiceModel.Channels.Message.CreateMessage(

MessageVersion.Soap12WSAddressing10, _accion, _objetoAEnviar, serializer);

_outChannel.Send(msg);

Serializarlo antes al formato requeridoMismo código en PC y Compact Framework

El canal se puede quedar abierto para reutilizarlo

Page 18: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Necesario para leer mensajesBucle en thread secundarioMismo código en PC y Compact FrameworkSe puede usar la cabecera “action” para determinar el tipo de mensaje

El servidor y el cliente han de estar de acuerdo en la cabecera, es texto.

Page 19: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

BindingParameterCollection parameters = new BindingParameterCollection();IChannelListener<IInputChannel> listener = _binding.BuildChannelListener<IInputChannel>( MailUriHelper.CreateUri(_channelName, _emailAddress), parameters);listener.Open();IInputChannel inputChannel = listener.AcceptChannel();inputChannel.Open();listener.Close(); // Se puede cerrar una vez aceptado el canal.System.ServiceModel.Channels.Message reply = null;while (_processMessages){

if(inputChannel.TryReceive(new TimeSpan(0, 0, 0, 0, 2000), out reply)) { if(reply != null) { // Se ha recibido un mensaje, ver su tipo if(reply.Headers.Action == “accion”) {

// Realizar tarea con el mensaje }

} } } inputChannel.Close(); listener.Close();

Page 20: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 21: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Mostrar el uso del transporte de email de WCF en .NET Compact Framework 3.5

Ver un ejemplo de integración de una solución completa (móvil – Web)

Page 22: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 23: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 24: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Aplicación ASP.NETSe encarga de

Mostrar las localizaciones en un mapa de Virtual Earth

Page 25: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 26: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Aplicación Windows Forms .NET Compact Framework 3.5Se encarga de

Comunicarse con el GPSLocalización desde la aplicación Windows MobileLocalización solicitada por la central

Mensaje WCF desde la aplicación PC

Enviar mensajes a la central mediante ActiveSync

Page 27: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 28: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Aplicación Windows FormsSe encarga de

Solicitar localizaciones puntuales de usuarios

Manda mensaje WCF a Windows Mobile

Mostrar las localizaciones obtenidas en un mapa

Recibe mensajes WCF con datos de la posiciónIntegra interface Web para mostrar la localización en Virtual Earth

Page 29: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net
Page 30: Alejandro Mezcua MVP Device Application Development  alejandro.mezcua@byteabyte.net

Alejandro MezcuaMVP Device Application Developmenthttp://www.byteabyte.net/[email protected]