Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med apptjänster kan din app tillhandahålla tjänster till andra appar. En apptjänst körs som en bakgrundsaktivitet i en separat process och exponerar en kommunikationskanal för begäran/svar. Andra appar ansluter till tjänsten med AppServiceConnection.
Important
Apptjänster kräver MSIX-paketidentitet. Både provider- och konsumentapparna måste paketeras. Opaketerade skrivbordsappar kan inte vara värd för eller ansluta till apptjänster.
Note
Windows App SDK-appar kan endast vara värd för en apptjänst som en bakgrundsaktivitet utanför processen.
Microsoft.UI.Xaml.Application tillhandahåller inte någon OnBackgroundActivated-åsidosättning, och ExtendedActivationKind innehåller inte någon aktiveringstyp för apptjänst, så en Windows App SDK-app kan inte ta emot apptjänstaktivering direkt i sin egen process på samma sätt som en UWP-app kunde. Se Apptjänster i processen stöds inte för mer information.
Så här fungerar App Services
En apptjänst består av:
- En providerapp som deklarerar och implementerar tjänsten.
- En konsumentapp som ansluter till tjänsten och skickar begäranden.
Kommunikation använder ValueSet-objekt för begärande- och svarsdata.
Skapa apptjänstleverantören
Steg 1: Deklarera apptjänsten i manifestet
Lägg till ett appService tillägg till providerappens Package.appxmanifestoch ange startpunkten för bakgrundsaktivitetsprojektet som implementerar tjänsten:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Steg 2: Implementera tjänsten
Skapa ett separat Windows Runtime komponentprojekt och implementera IBackgroundTask. Bakgrundsaktiviteten tar slut, så det här mönstret fungerar oavsett om providerappen skapas med Windows App SDK eller 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();
}
}
Använda apptjänsten
Skapa en AppServiceConnection och skicka begäranden från konsumentappen:
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
Leta reda på PackageFamilyName för providerappen genom att köra kommandot Get-AppxPackage -Name *ProviderApp* i PowerShell, eller kontrollera providerappens paketmanifest.
Varför tjänsten måste köras utanför processen
En apptjänsts bakgrundsaktivitet körs alltid i en egen process (eller providerappens process, endast för UWP-leverantörer). För en Windows App SDK-providerapp måste bakgrundsaktiviteten köras i en separat process, eftersom det inte finns något stöd för att appens egen process tar emot aktivering via apptjänst. Mer information finns i Processbaserade apptjänster stöds inte.
Relaterat innehåll
Windows developer