Comunicarse con un servicio de aplicaciones remoto
Además de iniciar una aplicación en un dispositivo remoto mediante un URI, también puede ejecutar y comunicarse con los servicios de aplicaciones en dispositivos remotos. Cualquier dispositivo basado en Windows se puede usar como el cliente o el dispositivo host. Esto te proporciona un número casi ilimitado de formas de interactuar con dispositivos conectados sin necesidad de llevar una aplicación al primer plano.
Configuración del servicio de aplicaciones en el dispositivo host
Para ejecutar un servicio de aplicaciones en un dispositivo remoto, ya debe tener un proveedor de ese servicio de aplicaciones instalado en ese dispositivo. En esta guía se usará la versión de CSharp del ejemplo del servicio de aplicación Generador de números aleatorios, que está disponible en el repositorio de ejemplos universales de Windows. Para obtener instrucciones sobre cómo escribir su propio servicio de aplicaciones, consulte Creación y consumo de un servicio de aplicaciones.
Tanto si usa un servicio de aplicaciones ya hecho como si escribe su propio, deberá realizar algunas modificaciones para que el servicio sea compatible con sistemas remotos. En Visual Studio, vaya al proyecto del proveedor de servicios de aplicaciones (denominado "AppServicesProvider" en el ejemplo) y seleccione su archivo Package.appxmanifest . Haga clic con el botón derecho y seleccione Ver código para ver el contenido completo del archivo. Cree un elemento Extensions dentro del elemento Application principal (o busque si ya existe). A continuación, cree una extensión para definir el proyecto como un servicio de aplicaciones y haga referencia a su proyecto primario.
...
<Extensions>
<uap:Extension Category="windows.appService" EntryPoint="RandomNumberService.RandomNumberGeneratorTask">
<uap3:AppService Name="com.microsoft.randomnumbergenerator"/>
</uap:Extension>
</Extensions>
...
Junto al elemento AppService , agregue el atributo SupportsRemoteSystems :
...
<uap3:AppService Name="com.microsoft.randomnumbergenerator" SupportsRemoteSystems="true"/>
...
Para poder usar elementos en este espacio de nombres uap3 , debe agregar la definición del espacio de nombres en la parte superior del archivo de manifiesto si aún no lo está.
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3">
...
</Package>
A continuación, compile el proyecto del proveedor de servicios de aplicaciones e impleméntelo en los dispositivos host.
Destino del servicio de aplicaciones desde el dispositivo cliente
El dispositivo desde el que se va a llamar a App Service remoto necesita una aplicación con funcionalidad de sistemas remotos. Esto se puede agregar a la misma aplicación que proporciona el servicio de aplicaciones en el dispositivo host (en cuyo caso instalaría la misma aplicación en ambos dispositivos) o se implementaría en una aplicación completamente diferente.
Las siguientes instrucciones using son necesarias para que el código de esta sección se ejecute tal como está:
using Windows.ApplicationModel.AppService;
using Windows.System.RemoteSystems;
Primero debe crear una instancia de un objeto AppServiceConnection , como si fuera a llamar a un servicio de aplicaciones localmente. Este proceso se trata con más detalle en Creación y consumo de un servicio de aplicaciones. En este ejemplo, el servicio de aplicaciones que se va a establecer como destino es el servicio Generador de números aleatorios.
Nota:
Se supone que un objeto RemoteSystem ya se ha adquirido por algún medio dentro del código que llamaría al método siguiente. Consulte Iniciar una aplicación remota para obtener instrucciones sobre cómo configurarla.
// This method returns an open connection to a particular app service on a remote system.
// param "remotesys" is a RemoteSystem object representing the device to connect to.
private async void openRemoteConnectionAsync(RemoteSystem remotesys)
{
// Set up a new app service connection. The app service name and package family name that
// are used here correspond to the AppServices UWP sample.
AppServiceConnection connection = new AppServiceConnection
{
AppServiceName = "com.microsoft.randomnumbergenerator",
PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
};
A continuación, se crea un objeto RemoteSystemConnectionRequest para el dispositivo remoto previsto. A continuación, se usa para abrir AppServiceConnection en ese dispositivo. Tenga en cuenta que, en el ejemplo siguiente, el control de errores y los informes se simplifican considerablemente para mayor brevedad.
// a valid RemoteSystem object is needed before going any further
if (remotesys == null)
{
return;
}
// Create a remote system connection request for the given remote device
RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(remotesys);
// "open" the AppServiceConnection using the remote request
AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);
// only continue if the connection opened successfully
if (status != AppServiceConnectionStatus.Success)
{
return;
}
En este momento, debe tener una conexión abierta a un servicio de aplicaciones en un equipo remoto.
Mensajes específicos del servicio Exchange a través de la conexión remota
Desde aquí, puede enviar y recibir mensajes hacia y desde el servicio en forma de objetos ValueSet (para obtener más información, consulte Creación y consumo de un servicio de aplicaciones). El servicio Generador de números aleatorios toma dos enteros con las claves "minvalue"
y "maxvalue"
como entradas, selecciona aleatoriamente un entero dentro de su intervalo y lo devuelve al proceso de llamada con la clave "Result"
.
// create the command input
ValueSet inputs = new ValueSet();
// min_value and max_value vars are obtained somewhere else in the program
inputs.Add("minvalue", min_value);
inputs.Add("maxvalue", max_value);
// send input and receive output in a variable
AppServiceResponse response = await connection.SendMessageAsync(inputs);
string result = "";
// check that the service successfully received and processed the message
if (response.Status == AppServiceResponseStatus.Success)
{
// Get the data that the service returned:
result = response.Message["Result"] as string;
}
}
Ahora que se ha conectado a un servicio de aplicaciones en un dispositivo host de destino, ejecute una operación en ese dispositivo y haya recibido datos en el dispositivo cliente en respuesta.
Temas relacionados
Introducción a aplicaciones y dispositivos conectados (Project Rome)
Inicio de una aplicación remota
Crear y usar un servicio de aplicación
Referencia de api de sistemas remotos
Ejemplo de sistemas remotos