Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os serviços de aplicação permitem que a sua aplicação forneça serviços a outras aplicações. Um serviço de aplicação executa-se como uma tarefa em segundo plano num processo separado e expõe um canal de comunicação de pedido/resposta. Outras aplicações ligam-se ao serviço através do AppServiceConnection.
Importante
Os serviços de aplicação requerem identidade de pacote MSIX. Tanto a aplicação do fornecedor como a do consumidor devem ser embaladas. As aplicações de desktop não empacotadas não podem alojar nem ligar-se a serviços de aplicações.
Note
As aplicações do SDK de Aplicações Windows podem alojar um serviço de aplicações apenas como uma tarefa em segundo plano fora do processo.
Microsoft.UI.Xaml.Application não fornece um OnBackgroundActivated override, e ExtendedActivationKind não inclui um tipo de ativação de serviço de aplicações, por isso uma aplicação do SDK de Aplicações Windows não pode receber ativação de serviço de aplicações diretamente no seu próprio processo da mesma forma que uma aplicação UWP conseguiria. Consulte Os serviços de aplicação em processo não são suportados para mais detalhes.
Como funcionam os serviços de aplicações
Um serviço de aplicação consiste em:
- Uma aplicação de fornecedor que declara e implementa o serviço.
- Uma aplicação para consumidores que se liga ao serviço e envia pedidos.
A comunicação utiliza objetos ValueSet para dados de pedidos e respostas.
Criar o fornecedor de serviços de aplicação
Passo 1: Declarar o serviço da app no manifesto
Adicione uma extensão appService à Package.appxmanifest da aplicação do fornecedor e especifique o ponto de entrada do projeto da tarefa em segundo plano que implementa o serviço:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Passo 2: Implementar o serviço
Crie um projeto separado do Windows Runtime Component e implemente IBackgroundTask. A tarefa em segundo plano fica fora de processo, por isso este padrão funciona quer a aplicação do fornecedor seja construída com o SDK de Aplicações 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();
}
}
Consumir o serviço de aplicação
Na aplicação de cliente, crie um AppServiceConnection e envie pedidos:
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
Encontre o PackageFamilyName da aplicação do fornecedor executando Get-AppxPackage -Name *ProviderApp* no PowerShell ou consulte o manifesto do pacote da aplicação do fornecedor.
Porque é que o serviço tem de ser executado fora do processo
Uma tarefa em segundo plano de um serviço de aplicações é sempre executada no seu próprio processo (ou no processo da aplicação fornecedora, apenas para fornecedores UWP). Para uma aplicação fornecedora do SDK de Aplicações Windows, a tarefa em segundo plano tem de correr fora do processo porque não existe uma forma suportada para o próprio processo da aplicação receber a ativação do serviço de aplicação. Para mais informações, consulte Os serviços da aplicação no processo não são suportados.
Conteúdo relacionado
Windows developer