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:
- WS_SERVICE_HOSTWS_SERVICE_METADATA özelliğinde meta veri belgelerini belirtin.
- WS_SERVICE_HOSTWS_SERVICE_METADATA özelliğinde hizmet adını belirtin.
- WS_SERVICE_ENDPOINTüzerindeki WS_SERVICE_ENDPOINT_PROPERTY_METADATA özelliğini kullanarak tek tek uç noktaların bağlantı noktasını belirtin.
- WS-MetadataExchange isteklerine hizmet vermek için bir veya daha fazla WS_SERVICE_ENDPOINT yapısını etkinleştirin.
- İsteğe bağlı olarak, belirli bir adresteki Ws-MetadataExchange isteklerine hizmet için WS_SERVICE_ENDPOINT_PROPERTY_ID numaralandırmasında WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX belirtin.
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. |