Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit App-Diensten können Ihre App Dienste für andere Apps bereitstellen. Ein App-Dienst wird als Hintergrundaufgabe in einem separaten Prozess ausgeführt und macht einen Kommunikationskanal für Anforderung/Antwort verfügbar. Andere Apps stellen eine Verbindung mit dem Dienst mithilfe von AppServiceConnection her.
Important
App-Dienste erfordern MSIX-Paketidentität. Sowohl die Anbieter- als auch die Consumer-Apps müssen verpackt werden. Nicht paketierte Desktop-Apps können weder App-Dienste hosten noch eine Verbindung mit ihnen herstellen.
Note
Windows App SDK Apps können einen App-Dienst nur als Hintergrundaufgabe außerhalb des Prozesses hosten.
Microsoft.UI.Xaml.Application stellt keine OnBackgroundActivated-Überschreibung bereit, und ExtendedActivationKind enthält keinen Aktivierungstyp für App-Services, sodass eine Windows App SDK-App App-Service-Aktivierungen nicht direkt im eigenen Prozess verarbeiten kann, wie es bei einer UWP-App möglich ist. Weitere Informationen finden Sie unter In-Process-App-Dienste werden nicht unterstützt.
Funktionsweise von App-Diensten
Ein App-Dienst besteht aus:
- Eine Anbieter-App , die den Dienst deklariert und implementiert.
- Eine Consumer-App , die eine Verbindung mit dem Dienst herstellt und Anforderungen sendet.
Kommunikation verwendet ValueSet-Objekte für Anforderungs- und Antwortdaten.
Erstellen des App-Dienstanbieters
Schritt 1: Deklarieren des App-Diensts im Manifest
Fügen Sie dem Package.appxmanifest der Anbieter-App eine appService-Erweiterung hinzu, und geben Sie den Einstiegspunkt des Hintergrundaufgabenprojekts an, das den Dienst implementiert:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Schritt 2: Implementieren des Diensts
Erstellen Sie ein separates Windows-Runtime Component-Projekt und implementieren Sie IBackgroundTask. Die Hintergrundaufgabe wird in einem separaten Prozess ausgeführt, sodass dieses Muster unabhängig davon funktioniert, ob die Anbieter-App mit dem Windows App SDK oder UWP erstellt wurde:
// 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();
}
}
App-Dienst verwenden
Erstellen Sie in der Consumer-App eine AppServiceConnection Anforderung und senden Sie diese:
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
Suchen Sie die PackageFamilyName der Anbieter-App, indem Sie Get-AppxPackage -Name *ProviderApp* in PowerShell ausführen, oder überprüfen Sie das Paketmanifest der Anbieter-App.
Warum der Dienst außerhalb des Prozesses ausgeführt werden muss
Die Hintergrundaufgabe eines App-Diensts wird immer in einem eigenen Prozess ausgeführt (oder, nur bei UWP-Anbietern, im Prozess der Anbieter-App). Für eine Windows App SDK-Provider-App muss die Hintergrundaufgabe außerhalb des Prozesses ausgeführt werden, da es keine unterstützte Möglichkeit gibt, dass der app-eigene Prozess eine App-Service-Aktivierung empfängt. Weitere Informationen finden Sie unter In-Process-App-Dienste werden nicht unterstützt.
Verwandte Inhalte
Windows developer