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.
App Services permite que la aplicación proporcione servicios a otras aplicaciones. Un servicio de aplicaciones se ejecuta como una tarea en segundo plano en un proceso independiente y expone un canal de comunicación de solicitud/respuesta. Otras aplicaciones se conectan al servicio mediante AppServiceConnection.
Importante
Los servicios de aplicaciones requieren la identidad del paquete MSIX. Tanto el proveedor como las aplicaciones de consumidor deben empaquetarse. Las aplicaciones de escritorio sin empaquetar no pueden hospedar ni conectarse a los servicios de aplicaciones.
Note
Las aplicaciones de SDK de Aplicaciones para Windows solo pueden alojar un servicio de aplicación como una tarea en segundo plano out-of-process.
Microsoft.UI.Xaml.Application no proporciona una anulación de OnBackgroundActivated, y ExtendedActivationKind no incluye un tipo de activación de servicio de aplicación, por lo que una aplicación de SDK de Aplicaciones para Windows no puede recibir la activación de servicio de aplicación directamente en su propio proceso del mismo modo que una aplicación UWP podría. Consulte Servicios de aplicaciones en proceso no se admiten para obtener más información.
Cómo funcionan los servicios de aplicaciones
Un servicio de aplicaciones consta de:
- Aplicación de proveedor que declara e implementa el servicio.
- Una aplicación de consumidor que se conecta al servicio y envía solicitudes.
La comunicación usa objetos ValueSet para los datos de solicitud y respuesta.
Creación del proveedor de servicios de aplicaciones
Paso 1: Declarar el servicio de aplicaciones en el manifiesto
Agregue una appService extensión a la Package.appxmanifest aplicación del proveedor y especifique el punto de entrada del proyecto de tarea en segundo plano que implementa el servicio:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Paso 2: Implementar el servicio
Cree un proyecto de componente de Windows Runtime independiente e implemente IBackgroundTask. La tarea en segundo plano se ejecuta fuera de proceso, por lo que este patrón funciona si la aplicación de proveedor se compila con la SDK de Aplicaciones para Windows o UWP:
// MyAppService.ServiceTask, in a separate Windows Runtime Component project
public sealed class ServiceTask : IBackgroundTask
{
private BackgroundTaskDeferral _deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
taskInstance.Canceled += OnTaskCanceled;
var details = taskInstance.TriggerDetails as AppServiceTriggerDetails;
if (details != null)
{
details.AppServiceConnection.RequestReceived += OnRequestReceived;
}
}
private async void OnRequestReceived(AppServiceConnection sender,
AppServiceRequestReceivedEventArgs args)
{
var deferral = args.GetDeferral();
var response = new ValueSet();
response.Add("result", "Hello from the service!");
await args.Request.SendResponseAsync(response);
deferral.Complete();
}
private void OnTaskCanceled(IBackgroundTaskInstance sender,
BackgroundTaskCancellationReason reason)
{
_deferral?.Complete();
}
}
Consumo del servicio de aplicaciones
Desde la aplicación para consumidores, cree un AppServiceConnection y envíe solicitudes:
using Windows.ApplicationModel.AppService;
using Windows.Foundation.Collections;
private async Task CallAppServiceAsync()
{
var connection = new AppServiceConnection
{
AppServiceName = "com.example.myappservice",
PackageFamilyName = "ProviderApp_1234567890abc"
};
var status = await connection.OpenAsync();
if (status != AppServiceConnectionStatus.Success)
{
// Handle connection failure
return;
}
var request = new ValueSet
{
{ "command", "add" },
{ "a", 5 },
{ "b", 3 }
};
var response = await connection.SendMessageAsync(request);
if (response.Status == AppServiceResponseStatus.Success)
{
int result = (int)response.Message["result"];
// result is 8
}
connection.Dispose();
}
Tip
Busque el PackageFamilyName de la aplicación del proveedor mediante la ejecución de Get-AppxPackage -Name *ProviderApp* en PowerShell, o compruebe el manifiesto del paquete de la aplicación del proveedor.
¿Por qué el servicio debe ejecutarse fuera de proceso?
La tarea en segundo plano de un servicio de aplicaciones siempre se ejecuta en su propio proceso (o el proceso de la aplicación del proveedor, solo para proveedores de UWP). En el caso de una aplicación de proveedor de SDK de Aplicaciones para Windows, la tarea en segundo plano debe ejecutarse fuera de proceso porque no hay ninguna manera admitida de que el propio proceso de la aplicación reciba la activación de app-service. Para obtener más información, consulte Servicios de aplicaciones en proceso no se admiten.