Megosztás a következőn keresztül:


Házirend-támogatás

A Wsutil feldolgozza a bemeneti metaadatokban megadott szabályzatot, és segédprogramokat hoz létre a szolgáltatásmodellek támogatásához.

Szabályzattámogatás használata a wsutilben

A fejlesztőknek a következő lépéseket kell követniük a szabályzat támogatásának használatához a wsutil fordítóban:

  • Gyűjtse össze a célzott webszolgáltatáshoz szükséges összes bemeneti metaadatfájlt.
  • Az összes összegyűjtött WSDL/XSD/szabályzatfájl fordítása wsutil.exehasználatával. A Wsutil minden bemeneti WSDL- és XSD-fájlhoz létrehoz egy csonkfájlt és fejlécfájlt.
  • Vizsgálja meg a létrehozott fejlécfájlt, a szabályzatsegítő rutinneveket a fejlécfájl elején található megjegyzés szakaszban találja.
  • Szolgáltatásproxy létrehozásához használja bindingName_CreateServiceProxy segédproxyt.
  • Szolgáltatásvégpont létrehozásához használja bindingName_CreateServiceEndpoint segítő rutint.
  • Töltse ki WS_bindingTemplateType_BINDING_TEMPLATE metódus-aláírásban megadott struktúrát. A fejlesztők igény szerint további csatornatulajdonságokat és/vagy biztonsági tulajdonságokat is megadhatnak.
  • Hívja meg a segítői rutinokat, amikor létrejön a sikeres visszatérési szolgáltatásproxy vagy szolgáltatásvégpont.

A következő szakaszok részletesen ismertetik a kapcsolódó témaköröket.

Szabályzat bemenetének kezelése

Az alábbiakban szabályzatfeldolgozáshoz fordítóbeállításokat.

Alapértelmezés szerint a wsutil mindig szabályzatsablonokat hoz létre, hacsak nem hívja meg a "/nopolicy" beállítást. A szabályzat beágyazható egy WSDL-fájl részeként, vagy külön létrehozható szabályzat metaadatfájlként, amelyet a wsutil bemenetként használ. A "/wsp:" fordítóbeállítás azt jelzi, hogy a megadott bemeneti metaadatok szabályzatfájlok. A Wsutil a következő összeállítással hozza létre a szabályzattal kapcsolatos lehetséges segítőket:

wsutil /wsdl:trusted.wsdl /wsdl:trusted1.wsdl

wstuil /wsdl:input.wsdl /wsp:policy.wsp

A "/nopolicy" beállítás használata esetén a rendszer nem hoz létre házirend-segítőket, mint az alábbi példában.

wsutil /nopolicy /wsdl:trusted.wsdl /wsdl:trusted1.wsdl

Metaadatok leképezése lap részletesen ismerteti a különböző kötéstípusú metaadat-szerkezetek közötti leképezést.

A szabályzatbeállítások három kategóriája adható meg a szabályzatbeállításokban:

Kötéssablon típusa

A wsutil csak korlátozott számú kötést támogat. Ezeknek a kötéseknek az összes támogatott kombinációja szerepel WS_BINDING_TEMPLATE_TYPE definícióban. Például a következő kötéshez a wsdl-ben

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

A Wsutil létrehoz WS_HTTP_BINDING_TEMPLATE_TYPE kötéssablontípust ehhez a kötéshez.

Szabályzatleírások

A bemeneti házirend beállításával a wsutil a bemeneti szabályzatot leíró szabályzatleírások készletét hozza létre, beleértve a sablon típusát, valamint a szabályzatban megadott értékeket. Például a bemenethez

<wsdl:binding...>
  <soap11:binding.../> =< WS_ENVELOPE_VERSION_SOAP_1_1
</wsdl:binding>

A wsutil létrehoz egy csatornatulajdonság-leírást, például:

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),
},

Az egyik kötés összes szabályzatbeállítása (csatornatulajdonságok, biztonsági tulajdonságok és biztonsági kötési tulajdonságok) egyetlen WS_bindingTemplateType_POLICY_DESCRIPTION struktúrába van összesítve. WS_BINDING_TEMPLATE_TYPE a wsutil által támogatott különböző kötési házirend-kombinációkat adja meg.

Alkalmazás által kitöltendő sablonstruktúra

A szabályzat leírása tartalmazza az adott kötés bemeneti metaadataiban megadott összes házirend-információt, de vannak olyan információk, amelyek nem jeleníthetők meg a szabályzatban, de felhasználói bemenetre van szükség, amikor a házirend-beállítással szolgáltatásproxyt és/vagy szolgáltatásvégpontot hoz létre. Az alkalmazásnak például meg kell adnia a HTTP-fejléc hitelesítéséhez szükséges hitelesítő adatokat.

Az alkalmazásnak ki kell töltenie a WS_bindingTemplateType_BINDING_TEMPLATE nevű sablonstruktúrát a webservices.h fájlban definiált különböző kötéssablon-típusokhoz:

struct WS_bindingTemplateType_BINDING_TEMPLATE
{
  WS_CHANNEL_PROPERTIES channelProperties;
  WS_SECURITY_PROPERTIES securityProperties;
  possible_list_of_SECURITY_BINDING_TEMPLATEs;
  ...
};

A biztonsági kötéssablonok listája nem kötelező, a egyeztetett biztonsági kötéstől függ. A WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE mező például WS_HTTP_SSL_BINDING_TEMPLATE jelenik meg, hogy az alkalmazás SSL-hez kapcsolódó biztonsági kötési információkat biztosítson, beleértve a hitelesítő adatokat is.

Az alkalmazásnak ki kell töltenie a struktúra összes mezőjét, mielőtt webszolgáltatási sablon API-kba hívna be. A szabályzatban nem ábrázolható további biztonsági tulajdonságokat és biztonsági kötési tulajdonságokat is ki kell tölteni, és a webszolgáltatási API-k a futtatókörnyezetben egyesítik a két tulajdonságkészletet. Ha nem alkalmazható, a mezők nullázhatók. A securityProperties például nullázható, ha nincs szükség további biztonsági tulajdonságokra.

Segítő rutinok és szabályzatleírás-deklaráció a fejlécfájlokban

A wsutil segítő rutint hoz létre a szolgáltatásmodell-réteg jobb támogatása érdekében, így az alkalmazás könnyebben hozhat létre szolgáltatásproxyt és szolgáltatásvégpontot. A szabályzat leírása is elérhető, így az alkalmazás közvetlenül használhatja őket. A CreateSerivceProxy súgó rutinja a következőképpen néz ki:

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

A fejlesztőknek javasoljuk, hogy használják ezeket a segítő rutinokat, bár közvetlenül is használhatják a webservices.dlláltal biztosított futtatókörnyezeti rutint. A fejlesztőknek nem ajánlott közvetlenül használniuk a szabályzatleírásokat szolgáltatásmodell réteg használatával történő programozáskor.

A szabályzatleírás-hivatkozások a speciális felhasználó fejlécében is létre lesznek hozva. Ha a fejlesztők nem használják a szolgáltatásmodell funkcióit, közvetlenül használhatják a szabályzat leírását.

struct {
  ...
  struct {
    ...
    } contracts;
  struct {
    WS_bindingTemplateType_POLICY_DESCRIPTION bindingName;
    ...
    } policies;
  }

Prototípusok definíciója csonkfájlokban

Kötésenként egyetlen szabályzatleírási struktúramező és a belsőleg hivatkozott segédleírások a helyi prototípus-struktúrában jönnek létre. A szabályzatleírások abban a fájlban jönnek létre, amelyben a WS_CONTRACT_DESCRIPTION létre van hozva. A fejlesztőknek általában nem kell megvizsgálniuk a csonkfájlt a fejlesztés során, bár a stub fájl tartalmazza a szabályzat specifikációinak összes részletét.

struct {
  ...
  struct {
  ... } contracts;
  ...
 struct {
      struct {
        hierarchy of policy template descriptions;
        } bindingName;
      ...
      list of bindings in the input wsdl file.
  } policies;
} fileNameLocalDefinitions;

Segítő rutinok implementálása a csonkfájlokban

A Wsutil segítő rutinokat hoz létre a WsCreateServiceProxytörténő alkalmazáshívások egyszerűsítése érdekében, és WS_SERVICE_ENDPOINT alapul szolgál a szabályzatbeállításokban megadott információk alapján.

Az adott porthoz megadott kötési korlátozásoktól függ, hogy az első argumentum a sablon struktúrájától függően eltérő. Az alábbi példa feltételezi a HTTP-átvitelt, a szolgáltatásproxy létrehozásának aláírása hasonló egy további csatornatípus-paraméterhez.

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

Támogatott házirend-beállítások

Az alábbi táblázat felsorolja a támogatott kötéssablon-típusokat, a típusban szükséges biztonsági kötéseket, a típushoz alkalmazásonként kitöltendő sablonstruktúrát és az egyező leírástípust. Az alkalmazásnak ki kell töltenie a sablonstruktúrát, míg az alkalmazásfejlesztőnek tisztában kell lennie azzal, hogy milyen biztonsági kötésekre van szükség az adott szabályzatban.

WS_BINDING_TEMPLATE_TYPE Biztonsági kötés kombinációi alkalmazás által kitöltendő sablonstruktúra szabályzat leírása
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 és 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 és 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 és 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 és 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 és 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 WS_SSL_TRANSPORT_SECURITY_BINDING és WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDINGWS_USERNAME_MESSAGE_SECURITY_BINDING a bootstrap csatornában 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 WS_SSL_TRANSPORT_SECURITY_BINDING és WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDINGWS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING a bootstrap csatornában 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 WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING és WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDINGWS_USERNAME_MESSAGE_SECURITY_BINDING a bootstrap csatornában 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 WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING és WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDINGWS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING a bootstrap csatornában WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_POLICY_DESCRIPTION

 

A WS_HTTP_SSL_BINDING_TEMPLATE_TYPE például azt jelzi, hogy a kötés bemeneti szabályzata HTTP-átvitelt, WS_SSL_TRANSPORT_SECURITY_BINDING. Az alkalmazásnak ki kell töltenie WS_HTTP_SSL_BINDING_TEMPLATE struktúrát, mielőtt meghívja a segítő rutinokat, és az egyező szabályzat leírása WS_HTTP_SSL_POLICY_DESCRIPTION. Pontosabban a WSDL kötési szakasza a következő szegmenseket tartalmazza:

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

Biztonsági környezet támogatása

biztonsági környezetbena rendszerindítási csatornát hozza létre a biztonságos beszélgetés szolgáltatáscsatornában való létrehozásához. A Wsutil csak azt a forgatókönyvet támogatja, amelyben a rendszerindító csatorna ugyanaz, mint a szolgáltatáscsatorna, ugyanazokkal a csatornatulajdonságokkal és biztonsági tulajdonságokkal. A biztonsági környezet üzenetkötéséhez átviteli biztonság szükséges; A wsutil támogatja a rendszerindítási csatornákat más üzenetbiztonsági kötésekkel, de csak a biztonsági környezetet támogatja, mint a szolgáltatáscsatorna egyetlen üzenetbiztonsági kötését, más üzenetbiztonsági kötésekkel kombinálva. A fejlesztők a szabályzatsablon támogatásán kívül is támogathatják ezeket a kombinációkat.

Az alábbi enumerálás a szabályzattámogatás része:

Az alábbi függvények a szabályzattámogatás részét képezik:

Az alábbi struktúrák a szabályzattámogatás részét képezik: