Mengonversi layanan aplikasi untuk dijalankan dalam proses yang sama dengan aplikasi host-nya
AppServiceConnection memungkinkan aplikasi lain untuk membangunkan aplikasi Anda di latar belakang dan memulai garis komunikasi langsung dengannya.
Dengan diperkenalkannya App Services dalam proses, dua aplikasi latar depan yang berjalan dapat memiliki jalur komunikasi langsung melalui koneksi layanan aplikasi. App Services sekarang dapat berjalan dalam proses yang sama dengan aplikasi latar depan yang membuat komunikasi antara aplikasi jauh lebih mudah dan menghapus kebutuhan untuk memisahkan kode layanan ke dalam proyek terpisah.
Mengubah model yang tidak diproses App Service menjadi model dalam proses memerlukan dua perubahan. Yang pertama adalah perubahan manifes.
<Package ... <Applications> <Application Id=... ... EntryPoint="..."> <Extensions> <uap:Extension Category="windows.appService"> <uap:AppService Name="InProcessAppService" /> </uap:Extension> </Extensions> ... </Application> </Applications>
EntryPoint
Hapus atribut dari <Extension>
elemen karena sekarang OnBackgroundActivated() adalah titik masuk yang akan digunakan saat layanan aplikasi dipanggil.
Perubahan kedua adalah memindahkan logika layanan dari proyek tugas latar belakangnya yang terpisah ke dalam metode yang dapat dipanggil dari OnBackgroundActivated().
Sekarang aplikasi Anda dapat langsung menjalankan App Service Anda. Misalnya, di App.xaml.cs:
[! CATATAN] Kode di bawah ini berbeda dari yang disediakan misalnya 1 (layanan di luar proses). Kode di bawah ini disediakan hanya untuk tujuan ilustrasi dan tidak boleh digunakan sebagai bagian dari contoh 2 (layanan dalam proses). Untuk melanjutkan transisi artikel dari contoh 1 (layanan di luar proses) ke dalam contoh 2 (layanan dalam proses) terus gunakan kode yang disediakan misalnya 1 alih-alih kode ilustrasi di bawah ini.
using Windows.ApplicationModel.AppService;
using Windows.ApplicationModel.Background;
...
sealed partial class App : Application
{
private AppServiceConnection _appServiceConnection;
private BackgroundTaskDeferral _appServiceDeferral;
...
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
base.OnBackgroundActivated(args);
IBackgroundTaskInstance taskInstance = args.TaskInstance;
AppServiceTriggerDetails appService = taskInstance.TriggerDetails as AppServiceTriggerDetails;
_appServiceDeferral = taskInstance.GetDeferral();
taskInstance.Canceled += OnAppServicesCanceled;
_appServiceConnection = appService.AppServiceConnection;
_appServiceConnection.RequestReceived += OnAppServiceRequestReceived;
_appServiceConnection.ServiceClosed += AppServiceConnection_ServiceClosed;
}
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
AppServiceDeferral messageDeferral = args.GetDeferral();
ValueSet message = args.Request.Message;
string text = message["Request"] as string;
if ("Value" == text)
{
ValueSet returnMessage = new ValueSet();
returnMessage.Add("Response", "True");
await args.Request.SendResponseAsync(returnMessage);
}
messageDeferral.Complete();
}
private void OnAppServicesCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
{
_appServiceDeferral.Complete();
}
private void AppServiceConnection_ServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
{
_appServiceDeferral.Complete();
}
}
Dalam kode di atas OnBackgroundActivated
metode menangani aktivasi layanan aplikasi. Semua peristiwa yang diperlukan untuk komunikasi melalui AppServiceConnection terdaftar, dan objek penundaan tugas disimpan sehingga dapat ditandai sebagai lengkap ketika komunikasi antara aplikasi selesai.
Saat aplikasi menerima permintaan dan membaca ValueSet yang disediakan untuk melihat apakah Key
string dan Value
ada. Jika ada maka layanan aplikasi mengembalikan sepasang Response
nilai string dan True
kembali ke aplikasi di sisi lain AppServiceConnection.
Pelajari selengkapnya tentang menyambungkan dan berkomunikasi dengan aplikasi lain di Membuat dan Menggunakan App Service.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk