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
A wsutil fordító által létrehozott szabályzattal kapcsolatos kód
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:
- Csatorna tulajdonságai. Jelenleg csak a következő csatornatulajdonságok támogatottak: WS_CHANNEL_PROPERTY_ENCODING, WS_CHANNEL_PROPERTY_ADDRESSING_VERSION és WS_CHANNEL_PROPERTY_ENVELOPE_VERSION.
- Biztonsági tulajdonságok. Jelenleg csak a következő biztonsági tulajdonságok támogatottak: WS_SECURITY_PROPERTY_TIMESTAMP_USAGE, WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT, WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL és WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION.
- Biztonsági kötés. Jelenleg csak a következő biztonsági kötések támogatottak: 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, és WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING.
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.
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:
- 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