Windows Uygulama SDK'sı'de uygulama hizmeti oluşturma ve kullanma

Uygulama hizmetleri, uygulamanızın diğer uygulamalara hizmet sağlamasına olanak sağlar. Uygulama hizmeti ayrı bir işlemde arka plan görevi olarak çalışır ve istek/yanıt iletişim kanalını kullanıma sunar. Diğer uygulamalar AppServiceConnection kullanarak hizmete bağlanır.

Important

Uygulama hizmetleri MSIX paket kimliği gerektirir. Hem sağlayıcı hem de tüketici uygulamaları paketlenmelidir. Paketlenmemiş masaüstü uygulamaları, uygulama hizmetlerini barındıramaz veya bu hizmetlere bağlanamaz.

Note

Windows Uygulama SDK'sı uygulamalar bir uygulama hizmetini yalnızca işlem dışı bir arka plan görevi olarak barındırabilir. Microsoft.UI.Xaml.Application, OnBackgroundActivated geçersiz kılmasını sağlamaz ve ExtendedActivationKind, uygulama hizmeti etkinleştirme türünü içermez; bu nedenle bir Windows Uygulama SDK'sı uygulaması, bir UWP uygulamasının yapabildiği gibi, uygulama hizmeti etkinleştirmesini doğrudan kendi işlemi içinde alamaz. Ayrıntılar için bkz. İşlem içi uygulama hizmetleri desteklenmez .

Uygulama hizmetleri nasıl çalışır?

Uygulama hizmeti şunlardan oluşur:

  1. Hizmeti bildiren ve uygulayan bir sağlayıcı uygulaması.
  2. Hizmete bağlanan ve istek gönderen bir tüketici uygulaması.

İletişim, istek ve yanıt verileri için ValueSet nesnelerini kullanır.

App Service sağlayıcısını oluşturma

1. Adım: Bildirimde uygulama hizmetini bildirme

Sağlayıcı uygulamasının appServiceöğesine bir Package.appxmanifest uzantı ekleyin ve hizmeti uygulayan arka plan görev projesinin giriş noktasını belirtin:

<Extensions>
  <uap:Extension Category="windows.appService">
    <uap:AppService Name="com.example.myappservice"
                    EntryPoint="MyAppService.ServiceTask" />
  </uap:Extension>
</Extensions>

2. Adım: Hizmeti uygulama

Ayrı bir Windows Çalışma Zamanı Bileşeni projesi oluşturun ve uygulayınIBackgroundTask. Arka plan görevi işlem dışı çalıştığından, sağlayıcı uygulamasının Windows Uygulama SDK'sı veya UWP ile derlenmiş olması fark etmeksizin bu düzen çalışır:

// 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 Service'i kullanma

Tüketici uygulamasından bir AppServiceConnection oluşturun ve istek gönderin:

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();
}

Tavsiye

PackageFamilyName PowerShell'de çalıştırarak Get-AppxPackage -Name *ProviderApp* sağlayıcı uygulamasını bulun veya sağlayıcı uygulamasının paket bildirimini denetleyin.

Hizmetin neden işlem dışı olması gerekiyor?

Bir uygulama hizmetinin arka plan görevi her zaman kendi işleminde (veya yalnızca UWP sağlayıcıları için sağlayıcı uygulamasının işleminde) çalışır. Windows Uygulama SDK'sı sağlayıcı uygulaması için, uygulamanın kendi işleminin uygulama hizmeti etkinleştirmesini almasının desteklenen bir yolu olmadığından arka plan görevinin işlem dışı çalışması gerekir. Daha fazla bilgi için bkz. İşlem içi uygulama hizmetleri desteklenmiyor.