Host Layanan

Host layanan adalah lingkungan runtime untuk menghosting layanan dalam proses.

Layanan dapat mengonfigurasi satu atau beberapa titik akhir di dalam host layanan.

Diagram memperlihatkan struktur host layanan yang berisi titik akhir layanan.

Membuat host layanan

Sebelum membuat host layanan, layanan perlu menentukan titik akhirnya. Titik akhir dalam host layanan ditentukan dalam struktur WS_SERVICE_ENDPOINT dan ditentukan oleh informasi berikut:

WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");

// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract = 
{
    &calculatorContractDescription, // comes from a generated header.
    NULL,
    &calculatorFunctions, // specified by the application
};

serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding =  WS_TCP_CHANNEL_BINDING; 
serviceEndpoint.contract = &calculatorContract;  
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION; 
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.

Hanya kontrak satu arah yang didukung untuk SOAP melalui UDP, yang diwakili oleh WS_UDP_CHANNEL_BINDING dalam enumerasi WS_CHANNEL_BINDING .

Setelah titik akhir ditentukan, titik akhir dapat diteruskan ke fungsi WsCreateServiceHost , yang mengambil array pointer ke struktur WS_SERVICE_ENDPOINT .

HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);

Aplikasi dapat secara opsional menyediakan array properti layanan ke WsCreateServiceHost untuk mengonfigurasi pengaturan kustom pada host layanan.

Aplikasi membuka host layanan untuk mulai menerima permintaan klien.

WsOpenServiceHost(serviceHost, NULL, NULL);

Setelah membuka host layanan, aplikasi dapat menutupnya jika tidak ada lagi operasi yang memerlukannya. Perhatikan bahwa ini tidak merilis sumber dayanya, dan dapat dibuka kembali dengan panggilan berikutnya ke WsResetServiceHost.

WsCloseServiceHost(serviceHost, NULL, NULL);

Setelah menutup host layanan, aplikasi dapat mengatur ulang host layanan untuk digunakan kembali.

WsResetServiceHost(serviceHost, NULL);

Ketika aplikasi dilakukan dengan host layanan, aplikasi dapat membebaskan sumber daya yang terkait dengan host layanan dengan memanggil fungsi WsFreeServiceHost . Perhatikan bahwa WsCloseServiceHost harus dipanggil sebelum memanggil fungsi ini.

WsFreeServiceHost(serviceHost, NULL);

Untuk informasi tentang melampirkan status kustom ke host layanan, lihat Status Host Pengguna

Untuk informasi tentang otorisasi di host layanan untuk titik akhir tertentu, lihat Otorisasi Layanan.

Untuk iinformasi tentang menerapkan operasi layanan dan kontrak layanan untuk layanan, lihat operasi layanan dan topik kontrak layanan.

Keamanan

Aplikasi dapat menggunakan properti berikut untuk mengontrol jumlah sumber daya yang dialokasikan host layanan atas nama aplikasi:

Default aman dipilih untuk masing-masing properti ini, aplikasi harus berhati-hati jika ingin memodifikasi properti ini. Di luar properti, saluran, pendengar , dan properti khusus pesan yang disebutkan di atas juga dapat dimodifikasi oleh aplikasi. Lihat pertimbangan keamanan komponen ini sebelum memodifikasi salah satu pengaturan ini.

Selain itu, pertimbangan desain aplikasi berikut harus dievaluasi dengan hati-hati saat menggunakan API host layanan WWSAPI:

  • Saat menggunakan MEX, aplikasi harus berhati-hati untuk tidak mengungkapkan data sensitif apa pun. Sebagai mitigasi, jika sifat data yang diekspos melalui MEX sensitif, aplikasi dapat memilih untuk mengonfigurasi titik akhir MEX dengan pengikatan aman yang memerlukan autentikasi paling sedikit dan menerapkan otorisasi sebagai bagian dari titik akhir menggunakan WS_SERVICE_SECURITY_CALLBACK.
  • Secara default informasi kesalahan kaya melalui kesalahan dinonaktifkan pada host layanan oleh properti WS_SERVICE_PROPERTY_FAULT_DISCLOSURE . Ini atas kebijakan aplikasi untuk mengirim informasi kesalahan yang kaya sebagai bagian dari kesalahan. Namun, ini dapat mengakibatkan pengungkapan informasi dan dengan demikian disarankan bahwa pengaturan ini hanya diubah untuk skenario penelusuran kesalahan.
  • Di luar validasi yang dilakukan untuk Profil Dasar 2.0 dan serialisasi XML, host layanan tidak melakukan validasi pada konten data yang diterima sebagai bagian dari parameter operasi layanan. Adalah tanggung jawab aplikasi untuk melakukan semua validasi parameter sendiri.
  • Otorisasi tidak diimplementasikan sebagai bagian dari host layanan. Namun, aplikasi dapat menerapkan skema otorisasi mereka sendiri menggunakan WS_SECURITY_DESCRIPTION dan WS_SERVICE_SECURITY_CALLBACK.
  • Aplikasi bertanggung jawab untuk menggunakan pengikatan aman pada titik akhirnya. Host layanan tidak memberikan keamanan apa pun di luar apa yang dikonfigurasi pada titik akhir.

Elemen API berikut digunakan dengan host layanan.

Panggilan Balik Deskripsi
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK Dipanggil saat saluran diterima di pendengar titik akhir oleh host layanan.
WS_SERVICE_CLOSE_CHANNEL_CALLBACK Dipanggil saat saluran ditutup atau dibatalkan pada titik akhir.

 

Enumeration Deskripsi
WS_SERVICE_ENDPOINT_PROPERTY_ID Parameter opsional untuk mengonfigurasi WS_SERVICE_ENDPOINT.
WS_SERVICE_HOST_STATE Menyatakan bahwa host layanan dapat berada.
WS_SERVICE_PROPERTY_ID Parameter opsional untuk mengonfigurasi host layanan.

 

Fungsi Deskripsi
WsAbortServiceHost Mengganggu dan menghentikan operasi saat ini pada host layanan.
WsCloseServiceHost Menutup semua pendengar sehingga tidak ada saluran baru yang diterima dari klien.
WsCreateServiceHost Membuat host layanan.
WsFreeServiceHost Merilis memori yang terkait dengan objek host layanan.
WsGetServiceHostProperty Mengambil properti Host Layanan tertentu.
WsOpenServiceHost Membuka host layanan untuk komunikasi dan memulai pendengar di semua titik akhir.
WsResetServiceHost Mengatur ulang host layanan untuk menggunakan kembali dan mengatur ulang saluran dan pendengar yang mendasar untuk digunakan kembali.

 

Handle Deskripsi
WS_SERVICE_HOST Jenis buram yang digunakan untuk mereferensikan host layanan.

 

Struktur Deskripsi
WS_SERVICE_ENDPOINT Mewakili titik akhir individual pada host layanan.
WS_SERVICE_ENDPOINT_PROPERTY Menentukan pengaturan khusus layanan.
WS_SERVICE_PROPERTY Menentukan pengaturan khusus layanan.
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK Menentukan panggilan balik yang dipanggil ketika saluran berhasil diterima.
WS_SERVICE_PROPERTY_CLOSE_CALLBACK Menentukan panggilan balik yang dipanggil saat saluran akan ditutup.