Aracılığıyla paylaş


Hizmet Meta Verileri

WWSAPI hizmet konağı uç noktaları için WS-MetadataExchange destekler. Aşağıdaki adımlarla hizmet ana bilgisayarında bu tür meta veri alışverişini etkinleştirebilirsiniz:

Hizmet Ana Bilgisayarında Meta Veri belgelerini / Hizmet adını belirtme

İlk adım, hizmet konağındaki meta veri belgelerini belirtmektir. Tek tek belgeleri bir dizi WS_XML_STRING* olarak toplayarak bunu yapın. Bu dizeler XML Şeması, WSDL veya WS-Policy belgesi olabilir. Bu, WS_SERVICE_PROPERTY_METADATA özelliği aracılığıyla belirtilir.

İsteğe bağlı olarak, bir uygulama WS_SERVICE_METADATAparçası olarak hizmet adını ve ad alanını da belirtebilir. Meta veri belgesi verilen hizmet adı için hizmet öğesini belirtmezse, hizmet modeli hizmet için karşılık gelen WSDL bağlantı noktalarıyla bir hizmet öğesi oluşturur.

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);

Belgeler üzerinde tek tek meta veri belgelerinin doğrulanmasının gerçekleştirileceğini unutmayın. Belgelerin içeriğini doğrulamak ve tüm içeri aktarma yollarının görece belirtildiğinden emin olmak uygulamanın sorumluluğundadır.

Belirtilen ad alanı, hizmet öğesinin hizmet konağı tarafından eklendiği belgeyi bulmak için kullanılır.

WSDL belgesine hizmet öğesi ekleme

Hizmet ana bilgisayarı, önceden belirtilmemişse uygulamanın adına bir hizmet öğesi eklemesi için olanak sağlar. Bu davranışı etkinleştirmek için uygulamanın WS_SERVICE_METADATA yapısında serivceName ve serviceNs alanlarını belirtmesi gerekir. serviceName ve serviceN'lerin ikisi de NULL ise WSDL belgesine hiçbir hizmet öğesi eklenmez. Her ikisi de serviceElement öğesinin eklendiği belgeyi tanımlamak için kullanılır.

WS_SERVICE_PROPERTY_METADATA özelliği belirtilmezse, hizmet ana bilgisayarında hiçbir meta veri yok.

WS_SERVICE_ENDPOINT bağlantı noktasını belirtme

Bir WS_SERVICE_ENDPOINT WSDL belgesindeki hizmet öğesinin içinde bağlantı noktası olarak kullanılabilir olması için uygulamanın üzerinde WS_SERVICE_ENDPOINT_PROPERTY_METADATA özelliği belirtmesi gerekir.

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);

Bağlama adına ve ad alanına başvurunun, WS_SERVICE_PROPERTY_METADATA parçası olarak hizmet ana bilgisayarında belirtilen belgelerde mevcut olduğu varsayılır. Çalışma zamanı bunu uygulama adına doğrulamaz.

WS_SERVICE_ENDPOINT'da WS-MetadataExchange hizmeti etkinleştirme

WS-MetadataExchange isteklerine hizmet verebilmek için hizmet ana bilgisayarının WS-MetadataExchange isteklerine hizmet vermek için en az bir uç nokta etkinleştirilmiş olması gerekir. Bu, WS_SERVICE_ENDPOINTWS-MetadataExchange için uygun sürümü ayarlayarak yapılır.

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);

WS_SERVICE_ENDPOINT'de HTTP GET servislerini etkinleştirme

HIZMETHTTP GET isteklerine hizmet verebilmek için hizmet ana bilgisayarında hizmet WS-MetadataExchange isteklerine hizmet vermek için en az bir uç noktanın etkinleştirilmesi gerekir. Bu, WS_SERVICE_ENDPOINTWS-MetadataExchange için uygun sürümü ayarlayarak yapılır.

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);

Ws-MetadataExchange istekleri için URL son eki belirtme

Bir uygulama isteğe bağlı olarak yalnızca belirli bir yolda WS-MetadataExchange isteklerini kabul etme özelliğini etkinleştirebilir. Bu, verilen WS_SERVICE_ENDPOINT için bir sonek belirtilerek yapılır. Bu sonek, WS_SERVICE_ENDPOINT için gerçek URL'ye as-is birleştirilir. Birleştirilmiş dize, alınan 'to' üst bilgisinin eşleşen URL'si olarak kullanılır.

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);

Aşağıdaki API öğeleri hizmet metada ile ilgilidir.

Sayım Açıklama
WS_METADATA_EXCHANGE_TYPE Uç noktada WS-MetadataExchange ve HTTP GET bakımlarını etkinleştirir veya devre dışı bırakır.

 

Yapı Açıklama
WS_SERVICE_ENDPOINT_METADATA Uç noktanın bağlantı noktası öğesini temsil eder.
WS_SERVICE_METADATA Hizmet meta verileri belgeleri dizisini belirtir.
WS_SERVICE_METADATA_DOCUMENT Hizmet meta verilerini oluşturan tek tek belgeleri belirtir.