Aracılığıyla paylaş


İ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

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:

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.

WS_BINDING_TEMPLATE_TYPE Güvenlik bağlama birleşimleri uygulamaya göre doldurulacak şablon yapısı ilke açıklaması
WS_HTTP_BINDING_TEMPLATE_TYPE WS_HTTP_BINDING_TEMPLATE WS_HTTP_POLICY_DESCRIPTION
WS_HTTP_SSL_BINDING_TEMPLATE_TYPE WS_SSL_TRANSPORT_SECURITY_BINDING WS_HTTP_SSL_BINDING_TEMPLATE WS_HTTP_SSL_POLICY_DESCRIPTION
WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE_TYPE WS_HTTP_HEADER_AUTH_SECURITY_BINDING WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE WS_HTTP_HEADER_AUTH_POLICY_DESCRIPTION
WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE_TYPE WS_SSL_TRANSPORT_SECURITY_BINDING ve WS_HTTP_HEADER_AUTH_SECURITY_BINDING WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE WS_HTTP_SSL_HEADER_AUTH_POLICY_DESCRIPTION
WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE_TYPE WS_SSL_TRANSPORT_SECURITY_BINDING ve WS_USERNAME_MESSAGE_SECURITY_BINDING WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE WS_HTTP_SSL_USERNAME_POLICY_DESCRIPTION
WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE WS_SSL_TRANSPORT_SECURITY_BINDING ve WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE WS_HTTP_SSL_KERBEROS_APREQ_POLICY_DESCRIPTION
WS_TCP_BINDING_TEMPLATE_TYPE WS_TCP_BINDING_TEMPLATE WS_TCP_POLICY_DESCRIPTION
WS_TCP_SSPI_BINDING_TEMPLATE_TYPE WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING WS_TCP_SSPI_BINDING_TEMPLATE WS_TCP_SSPI_POLICY_DESCRIPTION
WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE_TYPE WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING ve WS_USERNAME_MESSAGE_SECURITY_BINDING WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE WS_TCP_SSPI_USERNAME_POLICY_DESCRIPTION
WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING ve WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE WS_TCP_SSPI_KERBEROS_APREQ_POLICY_DESCRIPTION
WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE Bootstrap kanalında WS_USERNAME_MESSAGE_SECURITY_BINDING ile WS_SSL_TRANSPORT_SECURITY_BINDING ve WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION
WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE Bootstrap kanalında WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING ile WS_SSL_TRANSPORT_SECURITY_BINDING ve WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION
WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE Bootstrap kanalında WS_USERNAME_MESSAGE_SECURITY_BINDING ile WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING ve WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_POLICY_DESCRIPTION
WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE Bootstrap kanalında WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING ile WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING ve WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION

 

Ö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: