Tutorial: Intercambiar datos entre aplicaciones de escritorio y de dispositivos
Actualización: noviembre 2007
En este tutorial, creará una aplicación de agente de dispositivos, una aplicación de escritorio y un paquete de complementos en el almacén de datos. La aplicación de escritorio implementará e iniciará el agente de dispositivos, dependiendo de la información del paquete de complementos. A continuación, la aplicación de escritorio intercambiará datos del paquete con la aplicación de agente de dispositivos y finalizará. Llevará a cabo las tareas siguientes:
Crear una aplicación de agente de dispositivos administrada.
Crear un paquete de complementos para la aplicación de agente de dispositivos.
Crear una aplicación de escritorio que inicie el paquete y comunique con el agente de dispositivos.
Nota: |
---|
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio. |
Crear una aplicación de agente de dispositivos
Para crear una aplicación de agente de dispositivos
Inicie Visual Studio.
En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
(Visual C#) Expanda Visual C# y, a continuación, haga clic en Smart Device. Denomine el proyecto DeviceAgent y denomine la solución DataExchange. Haga clic en Aceptar.
(Visual Basic) Expanda Visual Basic y, a continuación, haga clic en Smart Device. Denomine el proyecto DeviceAgent y denomine la solución DataExchange. Haga clic en Aceptar.
Aparecerá el cuadro de diálogo Agregar nuevo proyecto de Smart Device.
Seleccione SDK de Windows Mobile 5.0 Smartphone para la plataforma de destino, haga clic en Aplicación de consola en el panel Plantillas y, a continuación, haga clic en Aceptar.
Se mostrará el nuevo proyecto DeviceAgent en el Explorador de soluciones.
(Visual C#) Haga clic con el botón secundario del mouse en Referencias en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia.
(Visual Basic) Haga clic con el botón secundario del mouse en DeviceAgent en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia.
Aparecerá el cuadro de diálogo Agregar referencia.
Haga clic en la ficha Examinar y navegue a unidad de disco:\Archivos de programa\Archivos comunes\Microsoft Shared\CoreCon\1.0\Target\Lib. Haga clic en Microsoft.Smartdevice.DeviceAgentTransport.dll y, a continuación, haga clic en Aceptar.
Una referencia a Microsoft.Smartdevice.DeviceAgentTransport se agregará al proyecto.
Haga doble clic en Program.cs (C#) o Module1.vb (Visual Basic) en el Explorador de soluciones para abrir el archivo en el Editor de código, si no está abierto ya.
Coloque el cursor al principio del archivo.
Inserte el código siguiente:
using Microsoft.SmartDevice.DeviceAgentTransport;
Imports Microsoft.SmartDevice.DeviceAgentTransport
Coloque el cursor dentro del método Main.
Inserte el código siguiente:
string[] serviceids = {"A92866CA-AE83-4848-9438-501D8DB3CF25"}; IDeviceAgentTransport transport = DeviceAgentTransportFactory.GetAgentTransport(); // Don't keep it waiting. transport.AcknowledgeLaunch(1, serviceids); IDevicePacketStream packetstream; transport.AcceptConnectionEx(serviceids[0], out packetstream); IPacket packet; packet = PacketFactory.GetNewPacket(); packet.WriteInt32(Environment.Version.Major); packet.WriteInt32(Environment.Version.Minor); packet.WriteInt32(Environment.Version.Build); packet.WriteInt32(Environment.Version.Revision); packetstream.Write(packet);
Dim serviceids(0 To 0) As String serviceids(0) = "A92866CA-AE83-4848-9438-501D8DB3CF25" Dim transport As IDeviceAgentTransport = DeviceAgentTransportFactory.GetAgentTransport() ' Don't keep it waiting. transport.AcknowledgeLaunch(1, serviceids) Dim packetstream As IDevicePacketStream transport.AcceptConnectionEx(serviceids(0), packetstream) Dim packet As IPacket packet = PacketFactory.GetNewPacket() packet.WriteInt32(Environment.Version.Major) packet.WriteInt32(Environment.Version.Minor) packet.WriteInt32(Environment.Version.Build) packet.WriteInt32(Environment.Version.Revision) packetstream.Write(packet)
El código anterior crea un objeto IDeviceAgentTransport y, a continuación, acepta una conexión del equipo de escritorio. El programa envía un paquete al equipo de escritorio que contiene información de versión de .NET Compact Framework.
En el menú Generar, haga clic en Generar solución.
Ahora tiene una aplicación de Smart Device denominada DeviceAgent. Más tarde implementará esta aplicación en el dispositivo.
Crear un paquete de complementos en el almacén de datos.
Para crear un paquete de complementos en el almacén de datos.
Inicie el Bloc de notas.
Copie lo siguiente en el archivo del Bloc de notas:
<?xml version="1.0" standalone="no"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <ADDONCONTAINER> <ADDON> <PACKAGECONTAINER> <PACKAGE ID="" NAME="DeviceAgent"> <PROPERTYCONTAINER /> <PACKAGETYPECONTAINER> <PACKAGETYPE Name="ARMV4I" ID="ARMV4I" Protected="True"> <PROPERTYCONTAINER> <PROPERTY ID="RemotePath" Protected="True">%CSIDL_PROGRAM_FILES%\DeviceAgent</PROPERTY> <PROPERTY ID="RootPath" Protected="True">C:\DataExchange\DeviceAgent\bin\Debug</PROPERTY> <PROPERTY ID="CPU" Protected="True">ARMV4I</PROPERTY> <PROPERTY ID="Host" Protected="True">DeviceAgent</PROPERTY> </PROPERTYCONTAINER> <FILECONTAINER> <FILE ID="DeviceAgent.exe" /> <FILE ID="Microsoft.Smartdevice.DeviceAgentTransport.dll" /> <FILE ID="DeviceAgentTransport.dll" /> </FILECONTAINER> </PACKAGETYPE> </PACKAGETYPECONTAINER> </PACKAGE> </PACKAGECONTAINER> </ADDON> </ADDONCONTAINER> </xsl:template> </xsl:stylesheet>
En Visual Studio, en el menú Herramientas, haga clic en Crear GUID.
Aparecerá el cuadro de diálogo Crear GUID.
Seleccione Formato del Registro, haga clic en Copiar y, a continuación, haga clic en Salir.
Pegue el GUID en el Bloc de notas, en el atributo de identificador de la etiqueta Package y quite los corchetes que encierran el GUID.
Por ejemplo, <Package ID="9C50B38D-4259-40b3-AE9F-C5887DD898FF" Name="DeviceAgent">.
Cambie el valor de la etiqueta <PROPERTY ID="RootPath" Protected="True"> a la carpeta donde se encuentra DeviceAgent.exe.
Por ejemplo, <PROPERTY ID="RootPath" Protected="True">c:\DataExchange\DeviceAgent\bin\debug</PROPERTY>.
Nota: Para determinar la ubicación de DeviceAgent.exe, haga clic con el botón secundario del mouse en el proyecto DeviceAgent en el Explorador de soluciones y, a continuación, haga clic en Propiedades. Haga clic en la ficha Generar y, a continuación, haga clic en Examinar al lado de Ruta de acceso de los resultados.
Copie la biblioteca unidad de disco:\Archivos de programa\Archivos comunes\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll en la ruta de acceso especificada bajo la ruta de acceso raíz.
Nota: Este paso es importante porque el ensamblado Microsoft.Smartdevice.DeviceAgentTransport.dll utiliza la biblioteca DeviceAgentTransport.dll. Ambos archivos se deben implementar con nuestra aplicación.
En el Bloc de notas, guarde el archivo.
\ProgramData\Microsoft\corecon\1.0\addons\package.xsl (Windows Vista)
\Documents and Settings\All Users\Application Data\Microsoft\corecon\1.0\addons\package.xsl (Otro)
Nota: Si ya se utiliza el nombre de archivo package.xsl, use otro nombre. El nombre de archivo no es importante porque todos los archivos de la carpeta se procesan como paquetes de complementos.
Cierre y reinicie Visual Studio.
Visual Studio carga la carpeta del paquete de complementos cuando se inicia. Si Visual Studio se inicia correctamente, el paquete estará libre de errores de sintaxis.
El almacén de datos ahora contendrá un paquete de complementos con el nombre DeviceAgent y un identificador que Visual Studio genera de forma única. Cuando se implementa el paquete, la API de conectividad de dispositivos Smart Device copia tres archivos de la carpeta de salida del proyecto DeviceAgent en el directorio unidad:\Archivos de programa\DeviceAgent. A continuación, ejecutará DeviceAgent.exe en el dispositivo.
Crear una aplicación de escritorio que implemente el paquete y comunique con el agente de dispositivos.
Para crear una aplicación de escritorio que implemente el paquete y comunique con el agente de dispositivos.
En Visual Studio, en el menú Archivo, elija Abrir y, a continuación, haga clic en Proyecto o solución.
Aparecerá el cuadro de diálogo Abrir proyecto.
Navegue a la solución DataExchange.sln, haga clic en ella y, a continuación, haga clic en Abrir.
Explorador de soluciones aparece con la aplicación DeviceAgent.
En el menú Archivo, elija Agregar y, después, haga clic en Nuevo proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
(Visual C#) Expanda Visual C# y, a continuación, haga clic en Windows.
(Visual Basic) Expanda Visual Basic y, a continuación, haga clic en Windows.
En el panel Plantillas, haga clic en Aplicación de consola.
Asigne al proyecto el nombre DesktopSide y, a continuación, haga clic en Aceptar.
El Explorador de soluciones contiene dos proyectos: DeviceAgent y DesktopSide.
Haga clic con el botón secundario del mouse en el proyecto DesktopSide en el Explorador de soluciones y, a continuación, haga clic en Establecer como proyecto de inicio.
(Visual C#) Haga clic con el botón secundario del mouse en Referencias en el proyecto DesktopSide en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia.
(Visual Basic) Haga clic con el botón secundario del mouse en DesktopSide en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia.
Aparecerá el cuadro de diálogo Agregar referencia.
Haga clic en la ficha Examinar, navegue a unidad de disco:\Archivos de programa\Archivos comunes\Microsoft Shared\CoreCon\1 .0\Bin, haga clic en Microsoft.Smartdevice.Connectivity.dll y, a continuación, haga clic en Aceptar.
Se agregará una referencia a Microsoft.Smartdevice.Connectivity al proyecto DesktopSide.
Haga doble clic en Program.cs (C#) o Module1.vb (Visual Basic) en el proyecto DesktopSide en el Explorador de soluciones para abrir el archivo en el Editor de código, si no está abierto ya.
Coloque el cursor al principio del archivo.
Inserte el código siguiente:
using Microsoft.SmartDevice.Connectivity; using System.Collections.ObjectModel;
Imports Microsoft.SmartDevice.Connectivity Imports System.Collections.ObjectModel
Coloque el cursor dentro del método Main.
Inserte el código siguiente:
// Change the locale ID to correspond to your installation of Visual Studio. DatastoreManager dsmgr = new DatastoreManager(1033); Platform platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr); Device emulator = platform.GetDevice(platform.GetDefaultDeviceId()); emulator.Connect(); // Add the GUID of your package below. RemoteAgent ra = emulator.GetRemoteAgent(new ObjectId("")); ra.Start("command line argument"); DevicePacketStream ps = ra.CreatePacketStream(new ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25")); Packet packet; packet = new Packet(); while (ps.IsConnected()) { if (ps.IsPacketAvailable()) { packet = ps.Read(); while (!packet.IsEndOfPacket()) { switch (packet.ReadDataType()) { case DataType.Int32Type: Console.WriteLine("Int32Type: " + packet.ReadInt32().ToString()); break; case DataType.StringType: Console.WriteLine("String: " + packet.ReadString()); break; default: break; } } break; } } Console.Read();
' Change the locale ID to correspond to your installation of Visual Studio. Dim dsmgr As New DatastoreManager(1033) Dim platform As Platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr) Dim emulator As Device = platform.GetDevice(platform.GetDefaultDeviceId()) emulator.Connect() ' Add the GUID of your package below. Dim ra As RemoteAgent = emulator.GetRemoteAgent(New ObjectId("")) ra.Start("command line argument") Dim ps As DevicePacketStream = ra.CreatePacketStream(New ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25")) Dim packet As Packet packet = New Packet() While ps.IsConnected() If ps.IsPacketAvailable() Then packet = ps.Read() While Not packet.IsEndOfPacket() Select Case packet.ReadDataType() Case DataType.Int32Type Console.WriteLine("Int32Type: " + packet.ReadInt32().ToString()) Case DataType.StringType Console.WriteLine("String: " + packet.ReadString()) Case Else End Select End While Exit While End If End While Console.Read()
El código anterior conecta a un emulador de Windows Mobile 5.0 e implementa el agente remoto en el dispositivo. A continuación establece una conexión con el dispositivo y lee los datos del paquete. La información leída en el dispositivo se muestra en la consola.
Agregue el identificador del paquete a emulator.GetRemoteAgent(new ObjectId("")).
Por ejemplo, emulator.GetRemoteAgent(new ObjectId("F85E57BA-5AE9-4FF7-8433-6AB7D991D034"))
Pegue el siguiente método auxiliar bajo el método Main:
// Return a platform if the supplied name can be found in the datastore. // Return null pointer if platform cannot be found. private static Platform GetPlatformByName(string p, DatastoreManager dsmgr) { // Get all platforms in the datastore. Collection<Platform> platforms = dsmgr.GetPlatforms(); // Find the platform whose name matches the parameter. foreach (Platform platform in platforms) { if (platform.Name == p) return platform; } return null; }
' Return a platform if the supplied name can be found in the datastore. ' Return null pointer if platform cannot be found. Private Function GetPlatformByName(ByVal p As String, ByVal dsmgr As DatastoreManager) As Platform ' Get all platforms in the datastore. Dim platforms As Collection(Of Platform) = dsmgr.GetPlatforms() ' Find the platform whose name matches the parameter. Dim platform As Platform For Each platform In platforms If platform.Name = p Then Return platform End If Next platform Return Nothing End Function 'GetPlatformByName
Presione F5 para depurar el proyecto DesktopSide.
DesktopSide se conecta e inicia el emulador si no se ha iniciado ya. A continuación implementa el paquete e inicia la aplicación DeviceAgent. Después, DesktopSide y DeviceAgent intercambiarán información del paquete y lo mostrarán al usuario.
Vea también
Conceptos
Controlar dispositivos con la API de conectividad de dispositivos inteligentes
Información general sobre paquetes de complementos
Otros recursos
Referencia de la API de conectividad de dispositivos inteligentes