Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan aplikasi memungkinkan aplikasi Anda menyediakan layanan ke aplikasi lain. Layanan aplikasi berjalan sebagai tugas latar belakang dalam proses terpisah dan mengekspos saluran komunikasi permintaan/respons. Aplikasi lain terhubung ke layanan menggunakan AppServiceConnection.
Important
Layanan aplikasi memerlukan identitas paket MSIX. Aplikasi penyedia dan konsumen harus di kemas. Aplikasi desktop yang tidak dikemas tidak dapat menghosting atau menyambungkan ke layanan aplikasi.
Note
SDK Aplikasi Windows aplikasi hanya dapat menghosting layanan aplikasi sebagai tugas latar belakang yang tidak diproses.
Microsoft.UI.Xaml.Application tidak menyediakan OnBackgroundActivated override, dan ExtendedActivationKind tidak mencakup jenis aktivasi app service, sehingga aplikasi SDK Aplikasi Windows tidak dapat menerima aktivasi app service secara langsung di dalam prosesnya sendiri sebagaimana aplikasi UWP dapat melakukannya. Lihat Layanan aplikasi dalam proses tidak didukung untuk detailnya.
Cara kerja layanan aplikasi
Layanan aplikasi terdiri dari:
- Aplikasi penyedia yang mendeklarasikan dan mengimplementasikan layanan.
- Aplikasi konsumen yang terhubung ke layanan dan mengirim permintaan.
Komunikasi menggunakan objek ValueSet untuk data permintaan dan respons.
Membuat penyedia layanan aplikasi
Langkah 1: Mendeklarasikan layanan aplikasi dalam manifes
appService Tambahkan ekstensi ke aplikasi Package.appxmanifestpenyedia , dan tentukan titik masuk proyek tugas latar belakang yang mengimplementasikan layanan:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.example.myappservice"
EntryPoint="MyAppService.ServiceTask" />
</uap:Extension>
</Extensions>
Langkah 2: Menerapkan layanan
Buat proyek Komponen Windows Runtime terpisah dan terapkan IBackgroundTask. Tugas latar belakang berjalan di luar proses aplikasi, sehingga pola ini berfungsi baik aplikasi penyedia dibuat dengan SDK Aplikasi Windows maupun 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();
}
}
Menggunakan layanan aplikasi
Dari aplikasi konsumen, buat AppServiceConnection dan kirim permintaan:
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
Temukan PackageFamilyName untuk aplikasi penyedia dengan menjalankan Get-AppxPackage -Name *ProviderApp* di PowerShell, atau periksa manifes paket aplikasi penyedia.
Mengapa layanan harus kehabisan proses
Tugas latar belakang layanan aplikasi selalu berjalan dalam prosesnya sendiri (atau proses aplikasi penyedia, hanya untuk penyedia UWP). Untuk aplikasi penyedia SDK Aplikasi Windows, tugas latar belakang harus berjalan di luar proses karena tidak ada cara yang didukung untuk proses aplikasi itu sendiri untuk menerima aktivasi layanan aplikasi. Untuk informasi selengkapnya, lihat Layanan aplikasi dalam proses tidak didukung.
Konten terkait
Windows developer