İlke Desteği
Wsutil, giriş meta verilerinde belirtilen ilkeyi işler ve hizmet modeli desteği için yardımcı yordamlar oluşturur.
wsutil'de ilke desteğini kullanma
Geliştiriciler, wsutil derleyicisinde ilke desteğini kullanmak için aşağıdaki adımları izlemelidir:
- Hedeflenen web hizmeti için gerekli tüm giriş meta veri dosyalarını toplayın.
- toplanan tüm WSDL/XSD/policy dosyalarını wsutil.exekullanarak derleyin. Wsutil, her giriş WSDL ve XSD dosyası için bir saplama dosyası ve üst bilgi dosyası kümesi oluşturur.
- Oluşturulan üst bilgi dosyasını inceleyin, tüm ilke yardımcı yordam adları üst bilgi dosyasının başındaki açıklama bölümünde listelenir.
- Hizmet ara sunucusu oluşturmak için bindingName_CreateServiceProxy yardımcı yordamını kullanın.
- Hizmet uç noktası oluşturmak için bindingName_CreateServiceEndpoint yardımcı yordamını kullanın.
- Yöntem imzasında belirtilen WS_bindingTemplateType_BINDING_TEMPLATE yapısını doldurun. Geliştiriciler gerektiğinde ek kanal özellikleri ve/veya güvenlik özellikleri sağlayabilir.
- Başarılı dönüş hizmeti ara sunucusu veya hizmet uç noktası oluşturulurken yardımcı yordamları çağırın.
Aşağıdaki bölümlerde ilgili konular ayrıntılı olarak açıklanmaktadır.
İlke girişini işleme
aşağıda, ilke işlemeyle ilgili derleyici seçenekleri verilmiştir.
Varsayılan olarak, "/nopolicy" seçeneğiyle çağrılmadığı sürece wsutil her zaman ilke şablonları oluşturur. İlke bir WSDL dosyasının parçası olarak eklenebilir veya wsutil'in giriş olarak aldığı bir ilke meta veri dosyası olarak ayrı olarak oluşturulabilir. Belirtilen giriş meta verilerinin bir ilke dosyası olduğunu belirtmek için "/wsp:" derleyici seçeneği kullanılır. Wsutil, aşağıdaki derlemeyle ilkeyle ilgili olası yardımcılar oluşturur:
wsutil /wsdl:trusted.wsdl /wsdl:trusted1.wsdl
wstuil /wsdl:input.wsdl /wsp:policy.wsp
Aşağıdaki örnekte olduğu gibi "/nopolicy" seçeneği kullanıldığında hiçbir ilke yardımcısı oluşturulmaz.
wsutil /nopolicy /wsdl:trusted.wsdl /wsdl:trusted1.wsdl
wsutil derleyicisi tarafından oluşturulan ilkeyle ilgili kod
Meta Veri Eşlemesi sayfası, farklı bağlama türlerine sahip meta veri yapıları arasındaki eşlemenin ayrıntılarını gösterir.
İlke ayarlarında üç ilke ayarı kategorisi belirtilebilir:
- Kanal Özellikleri. Şu anda yalnızca aşağıdaki kanal özellikleri desteklenir: WS_CHANNEL_PROPERTY_ENCODING, WS_CHANNEL_PROPERTY_ADDRESSING_VERSION ve WS_CHANNEL_PROPERTY_ENVELOPE_VERSION.
- Güvenlik özellikleri. Şu anda yalnızca aşağıdaki güvenlik özellikleri desteklenir: WS_SECURITY_PROPERTY_TIMESTAMP_USAGE, WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT, WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL ve WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION.
- Güvenlik bağlaması. Şu anda yalnızca aşağıdaki güvenlik bağlamaları desteklenir: WS_HTTP_HEADER_AUTH_SECURITY_BINDING, WS_SSL_TRANSPORT_SECURITY_BINDING, WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING, WS_USERNAME_MESSAGE_SECURITY_BINDING, WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING, ve WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING.
Bağlama şablonu türü
wsutil'de desteklenen sınırlı sayıda bağlama vardır. Bu bağlamaların desteklenen tüm birleşimleri WS_BINDING_TEMPLATE_TYPE tanımında listelenir. Örneğin, wsdl'de aşağıdaki bağlama için
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
Wsutil, bu bağlama için WS_HTTP_BINDING_TEMPLATE_TYPE bağlama şablonu türü oluşturur.
İlke açıklamaları
Giriş ilkesi ayarıyla wsutil, şablon türü ve ilkede belirtilen değerler de dahil olmak üzere giriş ilkesini açıklayan bir ilke açıklamaları kümesi oluşturur. Örneğin, giriş için
<wsdl:binding...>
<soap11:binding.../> =< WS_ENVELOPE_VERSION_SOAP_1_1
</wsdl:binding>
wsutil aşağıdaki gibi kanal özelliği açıklaması oluşturur:
WS_ENVELOPE_VERSION_SOAP_1_1,
{
WS_CHANNEL_PROPERTY_ENVELOPE_VERSION,
(void*)&locaDefinitions.policies.bindHostedClientSoap.envelopeVersion, //points to the WS_ENVELOPE_VERSION_SOAP_1_1 value above
sizeof(&localDefinitions.policies.bindHostedClientSoap.envelopeVersion),
},
Bir bağlamadaki tüm ilke ayarları (kanal özellikleri, güvenlik özellikleri ve güvenlik bağlama özellikleri) tek bir WS_bindingTemplateType_POLICY_DESCRIPTION yapısında toplanır. WS_BINDING_TEMPLATE_TYPE wsutil'in desteklediği farklı bağlama ilkesi bileşimlerini belirtir.
Uygulamaya göre doldurulacak şablon yapısı
İlke açıklaması, belirli bir bağlama için giriş meta verilerinde belirtilen tüm ilke bilgilerini içerir, ancak ilkede temsil edilemeyen bilgiler vardır, ancak hizmet ara sunucusu ve/veya hizmet uç noktası oluşturmak için bu ilkeler ayarı kullanılırken kullanıcı girişi gerekir. Örneğin, uygulamanın HTTP üst bilgi kimlik doğrulaması için kimlik bilgileri sağlaması gerekir.
Uygulamanın webservices.h içinde tanımlanan her farklı bağlama şablonu türü için WS_bindingTemplateType_BINDING_TEMPLATE adlı şablon yapısını doldurması gerekir:
struct WS_bindingTemplateType_BINDING_TEMPLATE
{
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
possible_list_of_SECURITY_BINDING_TEMPLATEs;
...
};
Güvenlik bağlama şablonlarının listesi isteğe bağlıdır, eşleşen güvenlik bağlaması bağlıdır. Örneğin, WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE alanı, kimlik bilgileri de dahil olmak üzere SSL ile ilgili güvenlik bağlama bilgilerini sağlamak üzere uygulamanın WS_HTTP_SSL_BINDING_TEMPLATE sunulur.
Web hizmetleri şablon API'lerini çağırmadan önce uygulamanın bu yapıdaki tüm alanları doldurması gerekir. ek güvenlik özelliklerinin yanı sıra ilkede temsil edilemeyen güvenlik bağlama özelliklerinin doldurulması gerekir ve web hizmetleri API'leri çalışma zamanındaki iki özellik kümesini birleştirir. Geçerli değilse alanlar sıfırlanabilir. Örneğin, ek güvenlik özellikleri gerekmiyorsa securityProperties sıfırlanabilir.
Üst bilgi dosyalarında yardımcı yordamlar ve ilke açıklaması bildirimi
wsutil, hizmet modeli katmanında daha iyi destek sağlamak için yardımcı yordam oluşturur; böylece uygulama hizmet proxy'si ve hizmet uç noktasını daha kolay oluşturabilir. İlke açıklaması, uygulamanın bunları doğrudan kullanabilmesi için de kullanıma sunulur. CreateSerivceProxy yardım yordamı şöyle görünür:
HRESULT bindingName_CreateServiceProxy(
__in_ecount_opt(propertyCount) const WS_PROXY_PROPERTY* properties,
__in const ULONG propertyCount,
__in WS_constraintName_BINDING_TEMPLATE* templateValue,
__deref_out WS_SERVICE_PROXY** serviceProxy,
__in_opt WS_ERROR* error);
Geliştiricilerin bu yardımcı yordamları kullanmaları teşvik edilir, ancak webservices.dlltarafından sağlanan çalışma zamanı yordamının altında doğrudan da kullanabilirler. Geliştiricilerin, hizmet modeli katmanını kullanarak programlama yaparken ilke açıklamalarını doğrudan kullanmaları önerilmez.
İlke açıklaması başvuruları, gelişmiş kullanıcı için üst bilgide de oluşturulur. Geliştiriciler hizmet modeli işlevlerini kullanmıyorsa ilke açıklamalarını doğrudan kullanabilir.
struct {
...
struct {
...
} contracts;
struct {
WS_bindingTemplateType_POLICY_DESCRIPTION bindingName;
...
} policies;
}
Saplama dosyalarındaki tanım prototipleri
Bağlama başına tek bir ilke açıklama yapısı alanı ve dahili olarak başvuruda bulunan yardımcı açıklamaları yerel prototip yapısında oluşturulur. İlke açıklamaları, WS_CONTRACT_DESCRIPTION oluşturulduğu dosyada oluşturulur. Genellikle geliştiricilerin geliştirme sırasında saplama dosyasını incelemesi gerekmez, ancak saplama dosyası ilke belirtimleriyle ilgili tüm ayrıntıları içerir.
struct {
...
struct {
... } contracts;
...
struct {
struct {
hierarchy of policy template descriptions;
} bindingName;
...
list of bindings in the input wsdl file.
} policies;
} fileNameLocalDefinitions;
Yardımcı yordamları saplama dosyalarında uygulama
Wsutil, WsCreateServiceProxy uygulama çağrılarını basitleştirmek ve ilke ayarlarında sağlanan bilgileri temel WS_SERVICE_ENDPOINT oluşturmak için yardımcı yordamlar oluşturur.
Verilen bağlantı noktası için belirtilen bağlama kısıtlamalarına bağlıdır, ilk bağımsız değişken şablon yapısına göre farklıdır. Aşağıdaki örnekte HTTP aktarımı varsayılır; hizmet ara sunucusu oluşturma imzası, bir ek kanal türü parametresiyle benzerdir.
HRESULT bindingName_CreateServiceProxy(
__in WS_bindingTemplateType_BINDING_TEMPLATE* templateValue,
__in_ecount_opt(propertyCount) const WS_PROXY_PROPERTY* properties,
__in const ULONG propertyCount,
__deref_out WS_SERVICE_PROXY** serviceProxy,
__in_opt WS_ERROR* error)
{
return WsCreateServiceProxyFromTemplate(
WS_CHANNEL_TYPE_REQUEST, // this is fixed for http, requires input for TCP
properties,
propertyCount,
WS_bindingTemplateType_BINDING_TEMPLATE_TYPE,
templateValue,
sizeof(WS_bindingTemplateType_BINDING_TEMPLATE),
&fileName.policies.bindingName, // template description as generated in the stub file
sizeof(WS_constraintName_POLICY_DESCRIPTION),
serviceProxy,
error);
}
HRESULT bindingName_CreateServiceEndpoint(
__in WS_bindingTemplateType_BINDING_TEMPLATE* templateValue,
__in_opt const WS_STRING* addressUrl,
__in bindingNameFunctionTable* functionTable,
__in WS_SERVICE_SECURITY_CALLBACK authorizationCallback,
__in const WS_SERVICE_ENDPOINT_PROPERTY* properties,
__in ULONG propertyCount,
__in WS_HEAP* heap,
__deref_out WS_SERVICE_ENDPOINT** serviceEndpoint,
__in_opt WS_ERROR* error)
{
WS_SERVICE_CONTRACT serviceContract;
serviceContract.contractDescription = &fileName.contracts.bindingName;
serviceContract.defaultMessageHandlerCallback = NULL;
serviceContract.methodTable = (const void *)functionTable;
return WsCreateServiceEndpointFromTemplate(
properties,
propertyCount,
addressUrl, // service endpoint address
WS_CHANNEL_TYPE_RESPONSE, // this is fixed for http, requires input for TCP
&serviceContract,
authorizationCallback,
heap,
WS_bindingTemplateType_BINDING_TEMPLATE_TYPE,
templateValue,
sizeof(WS_bindingTemplateType_BINDING_TEMPLATE),
&fileName.policies.bindingName, // template description as generated in the stub file
sizeof(WS_bindingTemplateType_POLICY_DESCRIPTION),
serviceEndpoint,
error);
}
Desteklenen ilke ayarları
Aşağıdaki tabloda desteklenen tüm bağlama şablonu türleri, türünde gereken eşleşen güvenlik bağlamaları, tür için uygulamaya göre doldurulacak şablon yapısı ve eşleşen açıklama türü listelenmektedir. Uygulamanın şablon yapısını doldurması gerekirken, uygulama geliştiricisinin verilen ilkede gereken güvenlik bağlamalarının ne olduğunu anlaması gerekir.
Örneğin, WS_HTTP_SSL_BINDING_TEMPLATE_TYPE bağlama için giriş ilkesinin HTTP aktarımını ve WS_SSL_TRANSPORT_SECURITY_BINDINGbelirtir. Uygulamanın yardımcı yordamları çağırmadan önce WS_HTTP_SSL_BINDING_TEMPLATE yapısını doldurması gerekir ve eşleşen ilke açıklaması WS_HTTP_SSL_POLICY_DESCRIPTION. Daha açık belirtmek gerekirse, WSDL'deki bağlama bölümü aşağıdaki segmentleri içerir:
<wsp:Policy...>
<sp:TransportBinding...>
<wsp:Policy...>
<sp:TransportToken...>
<wsp:Policy...>
<sp:HttpsToken.../>
</wsp:Policy...>
</sp:TransportToken...>
</wsp:Policy>
</sp:TransportBinding...>
</wsp:Policy>
<wsdl:binding...>
<soap11:binding.../> => WS_ENVELOPE_VERSION_SOAP_1_1
</wsdl:binding>
Güvenlik Bağlamı desteği
Güvenlik Bağlamıiçinde, hizmet kanalında güvenli konuşma oluşturmak için bootstrap kanalı oluşturulur. Wsutil yalnızca bootstrap kanalının aynı kanal özelliklerine ve güvenlik özelliklerine sahip hizmet kanalıyla aynı olduğu senaryoyu destekler. Güvenlik bağlamı ileti bağlaması için aktarım güvenliği gereklidir; wsutil, diğer ileti güvenlik bağlamalarıyla bootstrap kanallarını destekler, ancak diğer ileti güvenlik bağlamalarıyla birlikte olmadan hizmet kanalındaki tek ileti güvenlik bağlaması olarak yalnızca güvenlik bağlamını destekler. Geliştiriciler, ilke şablonu desteği dışında bu birleşimleri destekleyebilir.
Aşağıdaki numaralandırma, ilke desteğinin bir parçasıdır:
Aşağıdaki işlevler ilke desteğinin bir parçasıdır:
Aşağıdaki yapılar ilke desteğinin bir parçasıdır:
- WS_HTTP_BINDING_TEMPLATE
- WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE
- WS_HTTP_HEADER_AUTH_POLICY_DESCRIPTION
- WS_HTTP_HEADER_AUTH_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TEMPLATE
- WS_HTTP_POLICY_DESCRIPTION
- WS_HTTP_SSL_BINDING_TEMPLATE
- WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE
- WS_HTTP_SSL_HEADER_AUTH_POLICY_DESCRIPTION
- WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE
- WS_HTTP_SSL_KERBEROS_APREQ_POLICY_DESCRIPTION
- WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE
- WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION
- WS_HTTP_SSL_POLICY_DESCRIPTION
- WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE
- WS_HTTP_SSL_USERNAME_POLICY_DESCRIPTION
- WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE
- WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION
- WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TEMPLATE
- WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TEMPLATE
- WS_SECURITY_CONTEXT_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_SECURITY_CONTEXT_SECURITY_BINDING_TEMPLATE
- WS_SSL_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE
- WS_SSPI_TRANSPORT_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_TCP_BINDING_TEMPLATE
- WS_TCP_POLICY_DESCRIPTION
- WS_TCP_SSPI_BINDING_TEMPLATE
- WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE
- WS_TCP_SSPI_KERBEROS_APREQ_POLICY_DESCRIPTION
- WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE
- WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION
- WS_TCP_SSPI_POLICY_DESCRIPTION
- WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TEMPLATE
- WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE
- WS_TCP_SSPI_USERNAME_POLICY_DESCRIPTION
- WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE
- WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION
- WS_USERNAME_MESSAGE_SECURITY_BINDING_POLICY_DESCRIPTION
- WS_USERNAME_MESSAGE_SECURITY_BINDING_TEMPLATE