Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met App Services kunt u uw app services bieden aan andere apps. Een App Service wordt uitgevoerd als achtergrondtaak in een afzonderlijk proces en maakt een communicatiekanaal voor aanvragen/antwoorden beschikbaar. Andere apps maken verbinding met de service met behulp van AppServiceConnection.
Important
Voor App Services is een MSIX-pakketidentiteit vereist. Zowel de provider- als consumenten-apps moeten worden verpakt. Uitgepakte bureaublad-apps kunnen geen app-services hosten of er verbinding mee maken.
Note
Windows App SDK-apps kunnen een app-service alleen hosten als een achtergrondtaak buiten proces.
Microsoft.UI.Xaml.Application biedt geen OnBackgroundActivated-override en ExtendedActivationKind bevat geen app-service-activeringstype, dus een Windows App SDK-app kan app-service-activatie niet rechtstreeks in zijn eigen proces ontvangen op dezelfde manier als een UWP-app dat wel kan. Zie In-process app-services worden niet ondersteund voor meer informatie.
Hoe app-services werken
Een app-service bestaat uit:
- Een provider-app die de service declareert en implementeert.
- Een consumenten-app die verbinding maakt met de service en aanvragen verzendt.
Communicatie maakt gebruik van ValueSet-objecten voor aanvraag- en antwoordgegevens.
De app-serviceprovider maken
Stap 1: De app-service declareren in het manifest
Voeg een appService extensie toe aan de provider-app Package.appxmanifesten geef het toegangspunt op van het achtergrondtaakproject waarmee de service wordt geïmplementeerd:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Stap 2: de service implementeren
Maak een afzonderlijk Windows Runtime Component-project en implementeer IBackgroundTask. De achtergrondtaak wordt buiten het proces uitgevoerd, dus dit patroon werkt ongeacht of de provider-app is gebouwd met de Windows App SDK of 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();
}
}
De app-service gebruiken
Maak vanuit de consumenten-app een AppServiceConnection aanvraag en verzend deze:
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
Zoek de PackageFamilyName van de provider-app door Get-AppxPackage -Name *ProviderApp* uit te voeren in PowerShell, of controleer het pakketmanifest van de provider-app.
Waarom de service buiten het proces moet worden uitgevoerd
De achtergrondtaak van een app-service wordt altijd uitgevoerd in een eigen proces (of het proces van de provider-app, alleen voor UWP-providers). Voor een Windows App SDK-provider-app moet de achtergrondtaak buiten het proces worden uitgevoerd, omdat er geen ondersteunde manier is waarop het eigen proces van de app app-serviceactivering kan ontvangen. Zie In-process app-services worden niet ondersteund voor meer informatie.
Verwante onderwerpen
Windows developer