Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les services d’application permettent à votre application de fournir des services à d’autres applications. Un service d’application s’exécute en tant que tâche en arrière-plan dans un processus distinct et expose un canal de communication de demande/réponse. D’autres applications se connectent au service à l’aide d’AppServiceConnection.
Important
Les services d’application nécessitent une identité de package MSIX. Le fournisseur et les applications grand public doivent être empaquetés. Les applications de bureau non empaquetées ne peuvent pas héberger ou se connecter aux services d’application.
Note
SDK d'application Windows applications peuvent héberger un service d’application uniquement en tant que tâche en arrière-plan hors processus.
Microsoft.UI.Xaml.Application ne fournit pas de substitution OnBackgroundActivated, et ExtendedActivationKind n’inclut pas de type d’activation de service d’application ; une application SDK d'application Windows ne peut donc pas recevoir directement l’activation de service d’application dans son propre processus de la même manière qu’une application UWP le pourrait. Voir Les services d’application in-process ne sont pas pris en charge pour plus d’informations.
Fonctionnement des services d’application
Un service d’application se compose des éléments suivants :
- Application fournisseur qui déclare et implémente le service.
- Application grand public qui se connecte au service et envoie des demandes.
La communication utilise des objets ValueSet pour les données de requête et de réponse.
Créer le fournisseur de services d’application
Étape 1 : déclarer le service d’application dans le manifeste
Ajoutez une extension appService à l’application du fournisseur Package.appxmanifest, et spécifiez le point d’entrée du projet de tâche d’arrière-plan qui implémente le service :
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Étape 2 : Implémenter le service
Créez un projet de composant Windows Runtime distinct et implémentez IBackgroundTask. La tâche en arrière-plan s’exécute hors processus. Par conséquent, ce modèle fonctionne si l’application fournisseur est générée avec la SDK d'application Windows ou 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();
}
}
Utiliser le service d’application
Depuis l’application grand public, créez un AppServiceConnection et envoyez des requêtes :
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
Recherchez le PackageFamilyName de l’application fournisseur en exécutant Get-AppxPackage -Name *ProviderApp* dans PowerShell, ou consultez le manifeste de package de l’application fournisseur.
Pourquoi le service doit s’exécuter hors processus
La tâche en arrière-plan d’un service d’application s’exécute toujours dans son propre processus (ou le processus de l’application fournisseur, pour les fournisseurs UWP uniquement). Pour une application fournisseur du SDK d’application Windows, la tâche en arrière-plan doit s’exécuter dans un processus distinct, car il n’existe aucun moyen pris en charge permettant au propre processus de l’application de recevoir l’activation du service d’application. Pour plus d’informations, consultez Les services d’application dans le processus ne sont pas pris en charge.
Contenu connexe
Windows developer