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.