alejandro mezcua mvp device application development alejandro.mezcua@byteabyte.net

Post on 03-Feb-2015

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Alejandro MezcuaMVP Device Application Developmenthttp://www.byteabyte.net/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?

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

Estos requisitos los cumple Microsoft Exchange 2007

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

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

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

Existe transporte para servicios Web WCF

Se pueden crear nuevos transportes en la infraestructura de WCF

Windows MobileWindowsMobileMailBinding

PCsExchangeWebServiceMailBinding

Incluido con .NET Compact Framework 3.5 SDK

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

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

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

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

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

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) );

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();

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

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.

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();

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)

Aplicación ASP.NETSe encarga de

Mostrar las localizaciones en un mapa de Virtual Earth

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

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

Alejandro MezcuaMVP Device Application Developmenthttp://www.byteabyte.net/alejandro.mezcua@byteabyte.net

top related