Alejandro Mezcua MVP Device Application Development [email protected].
-
Upload
adoncia-cerrito -
Category
Documents
-
view
3 -
download
0
Transcript of Alejandro Mezcua MVP Device Application Development [email protected].
Alejandro MezcuaMVP Device Application Developmenthttp://www.byteabyte.net/[email protected]
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/[email protected]