Bagikan melalui


Metadata Layanan

Host layanan WWSAPI mendukung WS-MetadataExchange untuk titik akhirnya. Anda mengaktifkan pertukaran metadata tersebut pada host layanan dengan langkah-langkah berikut:

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.