Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una AppServiceConnection permite a otra aplicación activar tu aplicación en segundo plano e iniciar una línea directa de comunicación con ella.
Con la introducción de los Servicios de Aplicación en proceso, dos aplicaciones en primer plano en ejecución pueden tener una línea directa de comunicación a través de una conexión del servicio de aplicación. App Services ahora se puede ejecutar en el mismo proceso que la aplicación en primer plano, lo que facilita mucho la comunicación entre aplicaciones y elimina la necesidad de separar el código de servicio en un proyecto independiente.
Convertir un modelo fuera de proceso de App Service en un modelo en proceso requiere dos cambios. La primera es un cambio de manifiesto.
<Package ... <Applications> <Application Id=... ... EntryPoint="..."> <Extensions> <uap:Extension Category="windows.appService"> <uap:AppService Name="InProcessAppService" /> </uap:Extension> </Extensions> ... </Application> </Applications>
Quite el EntryPoint
atributo del <Extension>
elemento porque ahora OnBackgroundActivated() es el punto de entrada que se usará cuando se invoque el servicio de aplicaciones.
El segundo cambio consiste en trasladar la lógica del servicio desde su proyecto independiente de tareas en segundo plano a métodos a los que se puede llamar desde OnBackgroundActivated().
Ahora tu aplicación puede ejecutar directamente App Service. Por ejemplo, en App.xaml.cs:
[! NOTA] El código siguiente es diferente del proporcionado por ejemplo 1 (servicio fuera de proceso). El código siguiente se proporciona solo con fines ilustrativos y no debe usarse como parte del ejemplo 2 (servicio en proceso). Para continuar con la transición del artículo del ejemplo 1 (servicio fuera del proceso) al ejemplo 2 (servicio en proceso), siga usando el código proporcionado por ejemplo 1 en lugar del código ilustrativo siguiente.
using Windows.ApplicationModel.AppService;
using Windows.ApplicationModel.Background;
...
sealed partial class App : Application
{
private AppServiceConnection _appServiceConnection;
private BackgroundTaskDeferral _appServiceDeferral;
...
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
base.OnBackgroundActivated(args);
IBackgroundTaskInstance taskInstance = args.TaskInstance;
AppServiceTriggerDetails appService = taskInstance.TriggerDetails as AppServiceTriggerDetails;
_appServiceDeferral = taskInstance.GetDeferral();
taskInstance.Canceled += OnAppServicesCanceled;
_appServiceConnection = appService.AppServiceConnection;
_appServiceConnection.RequestReceived += OnAppServiceRequestReceived;
_appServiceConnection.ServiceClosed += AppServiceConnection_ServiceClosed;
}
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
AppServiceDeferral messageDeferral = args.GetDeferral();
ValueSet message = args.Request.Message;
string text = message["Request"] as string;
if ("Value" == text)
{
ValueSet returnMessage = new ValueSet();
returnMessage.Add("Response", "True");
await args.Request.SendResponseAsync(returnMessage);
}
messageDeferral.Complete();
}
private void OnAppServicesCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
{
_appServiceDeferral.Complete();
}
private void AppServiceConnection_ServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
{
_appServiceDeferral.Complete();
}
}
En el código anterior, el OnBackgroundActivated
método controla la activación de App Service. Todos los eventos necesarios para la comunicación a través de AppServiceConnection se registran y el objeto de aplazamiento de tareas se almacena para que se pueda marcar como completo cuando se realice la comunicación entre las aplicaciones.
Cuando la aplicación recibe una solicitud y lee el ValorSet proporcionado para ver si las Key
cadenas y Value
están presentes. Si están presentes, el servicio de aplicaciones devuelve un par de valores de cadena Response
y True
a la aplicación en el otro lado de AppServiceConnection.
Obtenga más información sobre cómo conectarse y comunicarse con otras aplicaciones en Crear y consumir un servicio de aplicaciones.