Bagikan melalui


Proksi Layanan

Proksi layanan adalah proksi sisi klien untuk layanan. Proksi layanan memungkinkan aplikasi untuk mengirim dan menerima pesan melalui saluran sebagai panggilan metode.

Proksi layanan dibuat sesuai kebutuhan, dibuka, digunakan untuk memanggil layanan, dan ditutup saat tidak lagi diperlukan. Atau, aplikasi dapat menggunakan kembali proksi layanan untuk terhubung berulang kali ke layanan yang sama tanpa pengeluaran waktu dan sumber daya yang diperlukan untuk menginisialisasi proksi layanan lebih dari sekali. Diagram berikut mengilustrasikan alur kemungkinan status proksi layanan dan panggilan fungsi atau peristiwa yang mengarah dari satu status ke status lainnya.

Diagram showing the service proxy states and the function calls or events that lead from one state to another.

Status proksi layanan ini dijumlahkan dalam enumerasi WS_SERVICE_PROXY_STATE .

Seperti yang diilustrasikan oleh diagram sebelumnya dan kode berikut, proksi layanan dibuat oleh panggilan ke fungsi WsCreateServiceProxy . Sebagai parameter untuk panggilan ini, WWSAPI menyediakan enumerasi berikut:

Ini juga menerima parameter opsional menggunakan jenis data berikut:

Ketika proksi layanan telah dibuat, fungsi WsCreateServiceProxy mengembalikan referensi ke proksi layanan, WS_SERVICE_PROXY, melalui parameter keluar.

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

Ketika proksi layanan telah dibuat, aplikasi dapat membuka proksi layanan untuk komunikasi ke layanan dengan memanggil fungsi WsOpenServiceProxy , meneruskan struktur alamat yang berisi alamat jaringan titik akhir layanan untuk disambungkan.

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

Ketika proksi layanan telah dibuka, aplikasi dapat menggunakannya untuk melakukan panggilan ke layanan.

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

Ketika aplikasi tidak lagi membutuhkan proksi layanan, aplikasi menutup proksi layanan dengan memanggil fungsi WsCloseServiceProxy . Ini juga membebaskan memori terkait dengan memanggil WsFreeServiceProxy.

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

Gunakan kembali Proksi Layanan

Atau, setelah memanggil WsCloseServiceProxy , aplikasi dapat menggunakan kembali proksi layanan dengan memanggil fungsi WsResetServiceProxy .

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Untuk informasi selengkapnya tentang bagaimana proksi layanan digunakan dalam konteks yang berbeda, lihat topik berikut:

Keamanan

Pertimbangan desain aplikasi berikut harus dicatat dengan cermat saat Anda menggunakan API proksi layanan WWSAPI:

  • Proksi layanan tidak akan melakukan validasi data apa pun di luar validasi Profil Dasar 2.0 dan serialisasi XML. Adalah tanggung jawab aplikasi untuk memvalidasi data yang terkandung dalam parameter yang diterimanya kembali sebagai bagian dari panggilan.
  • Mengonfigurasi jumlah maksimum panggilan yang tertunda pada proksi layanan, dengan menggunakan nilai enumerasi WS_PROXY_PROPERTY_IDWS_PROXY_PROPERTY_MAX_PENDING_CALLS, memberikan perlindungan terhadap server yang berjalan lambat. Maksimum default adalah 100. Aplikasi harus berhati-hati dalam memodifikasi default.
  • Proksi layanan tidak memberikan jaminan keamanan di luar yang ditentukan dalam struktur WS_SECURITY_DESCRIPTION yang digunakan untuk berkomunikasi dengan server.
  • Berhati-hatilah saat Anda memodifikasi default pesan dan saluran pada proksi layanan. Baca pertimbangan keamanan yang terkait dengan pesan dan saluran sebelum Anda memodifikasi salah satu properti terkait.
  • Proksi layanan mengenkripsi semua kredensial yang disimpan dalam memori.

Elemen API berikut berkaitan dengan proksi layanan.

Callback Deskripsi
WS_PROXY_MESSAGE_CALLBACK Dipanggil ketika header pesan input akan dikirim melalui atau ketika header pesan output baru saja diterima.

 

Enumeration Deskripsi
WS_CALL_PROPERTY_ID Menghitung parameter opsional untuk mengonfigurasi panggilan pada operasi layanan sisi klien.
WS_PROXY_PROPERTY_ID Menghitung parameter opsional untuk mengonfigurasi proksi layanan.
WS_SERVICE_PROXY_STATE Status proksi layanan.

 

Fungsi Deskripsi
WsAbandonCall Mengabaikan panggilan tertentu pada proksi layanan tertentu.
WsAbortServiceProxy Membatalkan semua input dan output yang tertunda pada proksi layanan tertentu.
WsCall Hanya internal. Menserialisasikan argumen ke dalam pesan dan mengirimkannya melalui saluran.
WsCloseServiceProxy Menutup proksi layanan untuk komunikasi.
WsCreateServiceProxy Membuat proksi layanan.
WsFreeServiceProxy Merilis memori yang terkait dengan proksi layanan.
WsGetServiceProxyProperty Mengambil properti proksi layanan tertentu.
WsOpenServiceProxy Membuka proksi layanan ke titik akhir layanan.
WsResetServiceProxy Mereset proksi layanan.

 

Menangani Deskripsi
WS_SERVICE_PROXY Jenis buram yang digunakan untuk mereferensikan proksi layanan.

 

Struktur Deskripsi
WS_CALL_PROPERTY Menentukan properti panggilan.
WS_PROXY_PROPERTY. Menentukan properti proksi.