Metadata Layanan
Host layanan WWSAPI mendukung WS-MetadataExchange untuk titik akhirnya. Anda mengaktifkan pertukaran metadata tersebut pada host layanan dengan langkah-langkah berikut:
- Tentukan dokumen metadata di properti WS_SERVICE_METADATA pada WS_SERVICE_HOST.
- Tentukan nama layanan di properti WS_SERVICE_METADATA pada WS_SERVICE_HOST.
- Tentukan port untuk titik akhir individual dengan menggunakan properti WS_SERVICE_ENDPOINT_PROPERTY_METADATA pada WS_SERVICE_ENDPOINT.
- Aktifkan satu atau beberapa struktur WS_SERVICE_ENDPOINT untuk melayani permintaan WS-MetadataExchange.
- Secara opsional, tentukan WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX dalam enumerasi WS_SERVICE_ENDPOINT_PROPERTY_ID untuk melayani permintaan Ws-MetadataExchange pada alamat tertentu.
Menentukan dokumen Metadata / Nama layanan pada Host Layanan
Langkah pertama adalah menentukan dokumen metadata pada host layanan. Lakukan ini dengan mengumpulkan dokumen individual sebagai array WS_XML_STRING*. String ini dapat berupa Skema XML, WSDL, atau dokumen WS-Policy. Ini ditentukan melalui properti WS_SERVICE_PROPERTY_METADATA.
Secara opsional, aplikasi juga dapat menentukan nama layanan dan namespace layanan sebagai bagian dari WS_SERVICE_METADATA. Jika dokumen metadata tidak menentukan elemen layanan untuk nama layanan yang diberikan, model layanan akan menghasilkan elemen layanan dengan port WSDL yang sesuai untuk layanan.
WS_SERVICE_METADATA_DOCUMENT document = {0};
WS_STRING documentName = WS_STRING_VALUE(L"a.wsdl");
document.name = &documentName;
document.content = &wsdlDocument
WS_SERVICE_METADATA_DOCUMENT** metadataDocuments [] = {&document};
WS_SERVICE_METADATA serviceMetadata = {0};
// Specify Metadata documents
serviceMetadata.count = WsCountOf(metadataDocuments);
serviceMetadata.documents = &metadataDocuments;
// Specify service name
serviceMetadata.serviceName = &serviceName;
serviceMetadata.serviceNs = &serviceNamespace;
WS_SERVICE_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_PROPERTY_METADATA;
serviceProperties[0].value = &serviceMetadata;
serviceProperties[0].ValueSize = sizeof(serviceMetadata);
Perhatikan bahwa tidak ada verifikasi dokumen metadata individual yang akan dilakukan pada dokumen. Adalah tanggung jawab aplikasi untuk memvalidasi konten dokumen dan memastikan bahwa semua jalur impor relatif ditentukan.
Namespace yang ditentukan digunakan untuk menemukan dokumen tempat elemen layanan akan ditambahkan oleh host layanan.
Penambahan elemen layanan ke dokumen WSDL
Host layanan menyediakan fasilitas bagi aplikasi untuk menambahkan elemen layanan atas namanya jika belum ditentukan. Untuk mengaktifkan perilaku ini, aplikasi harus menentukan bidang serivceName dan serviceN pada struktur WS_SERVICE_METADATA. Jika serviceName dan serviceN keduanya NULL tidak ada elemen layanan yang ditambahkan ke dokumen WSDL. Kedua ini digunakan untuk mengidentifikasi dokumen di mana serviceElement akan ditambahkan.
Jika properti WS_SERVICE_PROPERTY_METADATA tidak ditentukan, tidak ada metadata exhange yang akan terjadi pada host layanan.
Menentukan port pada WS_SERVICE_ENDPOINT
Agar WS_SERVICE_ENDPOINT tersedia sebagai port di dalam elemen layanan dalam dokumen WSDL, aplikasi harus menentukan properti WS_SERVICE_ENDPOINT_PROPERTY_METADATA di atasnya.
WS_SERVICE_ENDPOINT_METADATA endpointPort = {0}
endpointPort.name = &portName;
endpointPort.bindingName = &bindingName;
endpointPort.bindingNs = &bindingNs;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA;
serviceProperties[0].value = &endpointPort;
serviceProperties[0].valueSize = sizeof(endpointPort);
Diasumsikan bahwa referensi ke nama pengikatan dan namespace layanan ada dalam dokumen yang ditentukan pada host layanan sebagai bagian dari WS_SERVICE_PROPERTY_METADATA. Runtime tidak memverifikasi ini atas nama aplikasi.
Mengaktifkan layanan WS-MetadataExchange di WS_SERVICE_ENDPOINT
Untuk melayani permintaan WS-MetadataExchange, host layanan harus memiliki setidaknya satu titik akhir yang diaktifkan untuk melayani permintaan WS-MetadataExchange. Ini dilakukan dengan mengatur versi yang sesuai untuk WS-MetadataExchange pada WS_SERVICE_ENDPOINT.
WS_METADATA_EXCHANGE_TYPE metadataExchangeType = WS_METADATA_EXCHANGE_TYPE_MEX;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_TYPE;
serviceProperties[0].value = &metadataExchangeType;
serviceProperties[0].ValueSize = sizeof(metadataExchangeType);
Mengaktifkan layanan HTTP GET di WS_SERVICE_ENDPOINT
Untuk melayani permintaanHTTP GET, host layanan harus memiliki setidaknya satu titik akhir yang diaktifkan untuk melayani permintaan WS-MetadataExchange. Ini dilakukan dengan mengatur versi yang sesuai untuk WS-MetadataExchange pada WS_SERVICE_ENDPOINT.
WS_METADATA_EXCHANGE_TYPE metadataExchangeType = WS_METADATA_EXCHANGE_TYPE_HTTP_GET;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_TYPE;
serviceProperties[0].value = &metadataExchangeType;
serviceProperties[0].ValueSize = sizeof(metadataExchangeType);
Menentukan akhiran URL untuk permintaan Ws-MetadataExchange
Aplikasi secara opsional hanya dapat mengaktifkan permintaan penerimaan untuk WS-MetadataExchange pada jalur tertentu. Ini dilakukan dengan menentukan akhiran untuk WS_SERVICE_ENDPOINT yang diberikan. Akhiran ini digabungkan as-is ke URL aktual untuk WS_SERVICE_ENDPOINT. String yang digabungkan digunakan sebagai URL yang cocok dengan header 'ke' yang diterima.
const WS_STRING suffix = WS_STRING_VALUE(L"mex");
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX;
serviceProperties[0].value = &suffix;
serviceProperties[0].valueSize = sizeof(suffix);
Elemen API berikut berkaitan dengan metada layanan.
Enumerasi | Deskripsi |
---|---|
WS_METADATA_EXCHANGE_TYPE | Mengaktifkan atau menonaktifkan WS-MetadataExchange dan layanan HTTP GET pada titik akhir. |
Struktur | Deskripsi |
---|---|
WS_SERVICE_ENDPOINT_METADATA | Mewakili elemen port untuk titik akhir. |
WS_SERVICE_METADATA | Menentukan array dokumen metadata layanan. |
WS_SERVICE_METADATA_DOCUMENT | Menentukan dokumen individual yang membentuk metadata layanan. |