Bagikan melalui


Operasi Layanan sisi klien

Berikut ini adalah tata letak operasi layanan sisi klien:

Tanda tangan untuk Operasi Layanan Sisi Klien

typedef HRESULT(CALLBACK *ICalculator_Add)(WS_SERVICE_PROXY* serviceProxy, 
                                           WS_HEAP* heap, 
                                           ULONG a, ULONG b, ULONG* result, 
                                           const WS_CALL_PROPERTY* callProperties, 
                                           const ULONG callPropertyCount, 
                                           const WS_ASYNC_CONTEXT* asyncContext, 
                                           WS_ERROR* error);

Pertimbangan Memori untuk Operasi Layanan Sisi Klien

Panggilan ke operasi layanan mengambil WS_HEAP* sebagai parameter. Ini adalah parameter yang diperlukan yang digunakan untuk serialisasi/deserialisasi isi pesan ke parameter.

Aplikasi harus memanggil WsResetHeap apakah panggilan berhasil atau tidak. Jika panggilan berhasil dan memiliki parameter keluar, aplikasi harus memanggil WsResetHeap segera setelah selesai dengan parameter keluar.

Aplikasi harus mengalokasikan memori untuk parameter masuk dan keluar dengan WsAlloc. Proksi layanan mungkin perlu mengalokasikannya kembali sehingga pointer yang disediakan akan ditimpa. Upaya untuk membebaskan memori tersebut akan menyebabkan aplikasi mengalami crash.

Operasi layanan sisi klien dan WS_HEAP

HRESULT hr = IProcessOrder_ProcessOrder(serviceProxy, heap, orderNumber, &orderReceipt, NULL, 0, NULL, error);
if(FAILED(hr))
    goto error;
hr = ProcessReceipt(orderReceipt);
WsResetHeap(heap);
if(FAILED(hr))
    goto error;
hr = IProcessOrder_CompleteOrder(serviceProxy, heap, orderNumber, &orderMemo, NULL, 0, NULL, error);
if(FAILED(hr))
    goto error;
hr = ProcessMemo(orderMemo);
WsResetHeap(heap);
if(FAILED(hr))
    goto error;

Parameter kesalahan

Aplikasi harus selalu meneruskan parameter kesalahan ke:

  • Dapatkan informasi kesalahan yang kaya jika kegagalan terjadi selama panggilan operasi layanan.
  • Dapatkan objek kesalahan jika layanan mengembalikan kesalahan. Kesalahan terkandung dalam objek kesalahan. Dalam hal ini, nilai HRESULT yang dikembalikan dari operasi layanan WS_E_ENDPOINT_FAULT_RECEIVED (lihat Nilai Pengembalian Layanan Web Windows).

Properti Panggilan untuk Operasi Layanan Sisi Klien

Properti panggilan memungkinkan aplikasi menentukan pengaturan kustom untuk panggilan tertentu. Saat ini, hanya satu properti panggilan yang tersedia dengan model layanan, WS_CALL_PROPERTY_CALL_ID.

WS_CALL_PROPERTY callProperties[1] = {0};
callProperties[0].id = WS_CALL_PROPERTY_CALL_ID;
callProperties[0].value = 5;

HRESULT hr = IProcessOrder_ProcessOrder(serviceProxy, heap, orderNumber, &orderReceipt,  callProperties, WsCountOf(callProperties), NULL, error);
if(FAILED(hr))
    goto error;
//:
//:
hr = IProcessOrder_CompleteOrder(serviceProxy, heap, orderNumber, &orderReceipt, callProperties, WsCountOf(callProperties), NULL, error);
if(FAILED(hr))
    goto error;

//:
//:
//:
// On a separate thread 
// In this case both the calls belong to call group 5, and will abandon as a result of the call to WsAbandonCall. 
hr = WsAbandonCall(serviceProxy, 5, error);

Mengabaikan Panggilan

Seringkali diinginkan untuk meninggalkan hasil panggilan untuk melepaskan kontrol kembali ke aplikasi, sehingga penyelesaian panggilan aktual ditangani oleh infrastruktur. Proksi layanan menyediakan fasilitas ini melalui WsAbandonCall.

Perhatikan bahwa kontrol kepada pemanggil mungkin tidak segera diberikan kembali, satu-satunya jaminan yang diberikan runtime proksi layanan adalah tidak akan menunggu operasi terikat I/O selesai sebelum memberikan kontrol kembali kepada pemanggil.

Panggilan pada operasi layanan sisi klien dapat ditinggalkan melalui panggilan ke WsAbandonCall. Dibutuhkan proksi layanan dan id panggilan. Id panggilan diberikan sebagai bagian dari properti panggilan pada operasi layanan.

Jika Id panggilan adalah 0, maka proksi layanan akan meninggalkan semua panggilan yang tertunda pada instans tersebut.

Batas Waktu Panggilan

Secara default proksi layanan memiliki batas waktu 30 detik untuk setiap panggilan. Batas waktu panggilan dapat diubah oleh properti proksi layanan WS_PROXY_PROPERTY_CALL_TIMEOUT saat membuat proksi layanan melalui WsCreateServiceProxy.

Setelah batas waktu tercapai, panggilan ditinggalkan.

Nilai yang Dikembalikan

Semua nilai HRESULT yang berhasil harus diperlakukan sebagai sukses, dan semua nilai kegagalan harus diperlakukan sebagai kegagalan. Berikut ini adalah beberapa nilai HRESULT yang dapat diharapkan aplikasi:

  • WS_S_ASYNC: Panggilan akan diselesaikan secara asinkron.
  • NOERROR: Panggilan berhasil diselesaikan.
  • WS_E_OPERATION_ABANDONED: Panggilan telah ditinggalkan. Objek kesalahan berisi alasan untuk ditinggalkan.
  • WS_E_INVALID_OPERATION: Proksi layanan tidak dalam status yang sesuai untuk melakukan panggilan, periksa status proksi layanan untuk mengetahui status proksi layanan.

Untuk daftar lengkap nilai pengembalian, lihat Nilai Pengembalian Windows Web Services.

Contoh Kode

Untuk contoh kode, lihat yang berikut ini: