Berkomunikasi dengan layanan aplikasi jarak jauh

Selain meluncurkan aplikasi di perangkat jarak jauh menggunakan URI, Anda juga dapat menjalankan dan berkomunikasi dengan layanan aplikasi di perangkat jarak jauh. Perangkat berbasis Windows apa pun dapat digunakan sebagai klien atau perangkat host. Ini memberi Anda sejumlah cara yang hampir tak terbatas untuk berinteraksi dengan perangkat yang terhubung tanpa perlu membawa aplikasi ke latar depan.

Menyiapkan layanan aplikasi di perangkat host

Untuk menjalankan layanan aplikasi di perangkat jarak jauh, Anda harus sudah memiliki penyedia layanan aplikasi tersebut yang terinstal di perangkat tersebut. Panduan ini akan menggunakan versi CSharp dari sampel layanan aplikasi Generator Angka Acak, yang tersedia pada repositori sampel universal Windows. Untuk petunjuk tentang cara menulis layanan aplikasi Anda sendiri, lihat Membuat dan menggunakan layanan aplikasi.

Baik Anda menggunakan layanan aplikasi yang sudah dibuat atau menulis sendiri, Anda harus melakukan beberapa pengeditan untuk membuat layanan kompatibel dengan sistem jarak jauh. Di Visual Studio, buka proyek penyedia layanan aplikasi (disebut "AppServicesProvider" dalam sampel) dan pilih file Package.appxmanifest-nya . Klik kanan dan pilih Tampilkan Kode untuk melihat konten lengkap file. Buat elemen Extensions di dalam elemen Aplikasi utama (atau temukan jika sudah ada). Kemudian buat Ekstensi untuk menentukan proyek sebagai layanan aplikasi dan mereferensikan proyek induknya.

...
<Extensions>
    <uap:Extension Category="windows.appService" EntryPoint="RandomNumberService.RandomNumberGeneratorTask">
        <uap3:AppService Name="com.microsoft.randomnumbergenerator"/>
    </uap:Extension>
</Extensions>
...

Di samping elemen AppService , tambahkan atribut SupportsRemoteSystems :

...
<uap3:AppService Name="com.microsoft.randomnumbergenerator" SupportsRemoteSystems="true"/>
...

Untuk menggunakan elemen di namespace uap3 ini, Anda harus menambahkan definisi namespace di bagian atas file manifes jika belum ada.

<?xml version="1.0" encoding="utf-8"?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3">
  ...
</Package>

Kemudian buat proyek penyedia layanan aplikasi Anda dan sebarkan ke perangkat host.

Menargetkan layanan aplikasi dari perangkat klien

Perangkat tempat layanan aplikasi jarak jauh akan dipanggil membutuhkan aplikasi dengan fungsionalitas Sistem Jarak Jauh. Ini dapat ditambahkan ke dalam aplikasi yang sama yang menyediakan layanan aplikasi di perangkat host (dalam hal ini Anda akan menginstal aplikasi yang sama di kedua perangkat), atau diimplementasikan di aplikasi yang sama sekali berbeda.

Berikut ini menggunakan pernyataan yang diperlukan agar kode di bagian ini berjalan apa adanya:

using Windows.ApplicationModel.AppService;
using Windows.System.RemoteSystems;

Anda harus terlebih dahulu membuat instans objek AppServiceConnection , seolah-olah Anda memanggil layanan aplikasi secara lokal. Proses ini tercakup secara lebih rinci dalam Membuat dan menggunakan layanan aplikasi. Dalam contoh ini, layanan aplikasi yang akan ditargetkan adalah layanan Generator Angka Acak.

Catatan

Diasumsikan bahwa objek RemoteSystem telah diperoleh dengan beberapa cara dalam kode yang akan memanggil metode berikut. Lihat Meluncurkan aplikasi jarak jauh untuk petunjuk tentang cara menyiapkannya.

// This method returns an open connection to a particular app service on a remote system.
// param "remotesys" is a RemoteSystem object representing the device to connect to.
private async void openRemoteConnectionAsync(RemoteSystem remotesys)
{
    // Set up a new app service connection. The app service name and package family name that
    // are used here correspond to the AppServices UWP sample.
    AppServiceConnection connection = new AppServiceConnection
    {
        AppServiceName = "com.microsoft.randomnumbergenerator",
        PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
    };

Selanjutnya, objek RemoteSystemConnectionRequest dibuat untuk perangkat jarak jauh yang dimaksudkan. Kemudian digunakan untuk membuka AppServiceConnection ke perangkat tersebut. Perhatikan bahwa dalam contoh di bawah ini, penanganan kesalahan dan pelaporan sangat disederhanakan untuk keringkasan.

// a valid RemoteSystem object is needed before going any further
if (remotesys == null)
{
    return;
}

// Create a remote system connection request for the given remote device
RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(remotesys);

// "open" the AppServiceConnection using the remote request
AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);

// only continue if the connection opened successfully
if (status != AppServiceConnectionStatus.Success)
{
    return;
}

Pada titik ini, Anda harus memiliki koneksi terbuka ke layanan aplikasi pada komputer jarak jauh.

Bertukar pesan khusus layanan melalui koneksi jarak jauh

Dari sini, Anda dapat mengirim dan menerima pesan ke dan dari layanan dalam bentuk objek ValueSet (untuk informasi selengkapnya, lihat Membuat dan menggunakan layanan aplikasi). Layanan generator Angka acak mengambil dua bilangan bulat dengan kunci "minvalue" dan "maxvalue" sebagai input, secara acak memilih bilangan bulat dalam rentangnya, dan mengembalikannya ke proses panggilan dengan kunci "Result".

    // create the command input
    ValueSet inputs = new ValueSet();

    // min_value and max_value vars are obtained somewhere else in the program
    inputs.Add("minvalue", min_value);
    inputs.Add("maxvalue", max_value);

    // send input and receive output in a variable
    AppServiceResponse response = await connection.SendMessageAsync(inputs);

    string result = "";
    // check that the service successfully received and processed the message
    if (response.Status == AppServiceResponseStatus.Success)
    {
        // Get the data that the service returned:
        result = response.Message["Result"] as string;
    }
}

Sekarang Anda telah terhubung ke layanan aplikasi pada perangkat host yang ditargetkan, menjalankan operasi di perangkat tersebut, dan menerima data ke perangkat klien Anda sebagai respons.

Gambaran umum aplikasi dan perangkat yang terhubung (Project Rome)
Meluncurkan aplikasi jarak jauh
Membuat dan menggunakan layanan aplikasi
Referensi API Sistem Jarak Jauh
Sampel Sistem Jarak Jauh