Beleidsondersteuning
Wsutil verwerkt beleid dat is opgegeven in invoermetagegevens en genereert helperroutines voor ondersteuning van servicemodellen.
Beleidsondersteuning gebruiken in wsutil
Ontwikkelaars moeten de volgende stappen volgen om de beleidsondersteuning in wsutil compiler te gebruiken:
- Verzamel alle invoermetagegevensbestanden die nodig zijn voor de doelwebservice.
- Compileer alle verzamelde WSDL-/XSD-/beleidsbestanden met behulp van wsutil.exe. Wsutil genereert één set stub-bestand en headerbestand voor elke WSDL- en XSD-invoerbestanden.
- Controleer het gegenereerde headerbestand, alle namen van de beleidshelperroutines worden vermeld in de opmerkingensectie aan het begin van het headerbestand.
- Gebruik bindingName_CreateServiceProxy helperroutine om een serviceproxy te maken.
- Gebruik bindingName_CreateServiceEndpoint helperroutine om een service-eindpunt te maken.
- Vul WS_bindingTemplateType_BINDING_TEMPLATE structuur in die is opgegeven in de methodehandtekening. Ontwikkelaars kunnen indien nodig aanvullende kanaaleigenschappen en/of beveiligingseigenschappen bieden.
- Roep de helperroutines aan, bij een geslaagde retourserviceproxy of service-eindpunt wordt gemaakt.
In de volgende secties worden verwante onderwerpen uitgebreid beschreven.
Beleidsinvoer verwerken
Hieronder ziet u compileropties met betrekking tot beleidsverwerking.
Wsutil genereert standaard altijd beleidssjablonen, tenzij deze worden aangeroepen met de optie '/nopolicy'. Beleid kan worden ingesloten als onderdeel van een WSDL-bestand of kan afzonderlijk worden gemaakt als een bestand met beleidsmetagegevens dat wsutil als invoer gebruikt. De compileroptie '/wsp:' wordt gebruikt om aan te geven dat opgegeven invoermetagegevens een beleidsbestand is. Wsutil genereert potentiële beleidsgerelateerde helpers met de volgende compilatie:
wsutil /wsdl:trusted.wsdl /wsdl:trusted1.wsdl
wstuil /wsdl:input.wsdl /wsp:policy.wsp
Er worden geen beleidshelpers gegenereerd wanneer de optie '/nopolicy' wordt gebruikt, zoals in het volgende voorbeeld.
wsutil /nopolicy /wsdl:trusted.wsdl /wsdl:trusted1.wsdl
Aan beleid gerelateerde code gegenereerd door de wsutil-compiler
metagegevenstoewijzing pagina bevat informatie over de toewijzing tussen metagegevensconstructies met verschillende bindingstypen.
Er kunnen drie categorieën beleidsinstellingen worden opgegeven in beleidsinstellingen:
- Kanaaleigenschappen. Momenteel worden alleen de volgende kanaaleigenschappen ondersteund: WS_CHANNEL_PROPERTY_ENCODING, WS_CHANNEL_PROPERTY_ADDRESSING_VERSION en WS_CHANNEL_PROPERTY_ENVELOPE_VERSION.
- Beveiligingseigenschappen. Momenteel worden alleen de volgende beveiligingseigenschappen ondersteund: WS_SECURITY_PROPERTY_TIMESTAMP_USAGE, WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT, WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL en WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION.
- Beveiligingsbinding. Op dit moment worden alleen de volgende beveiligingsbindingen ondersteund: 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, en WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING.
Type bindingssjabloon
Er zijn beperkte aantallen bindingen die worden ondersteund in wsutil. Al deze ondersteunde combinaties van deze bindingen worden vermeld in WS_BINDING_TEMPLATE_TYPE definitie. Bijvoorbeeld voor de volgende binding in wsdl
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
Wsutil genereert WS_HTTP_BINDING_TEMPLATE_TYPE bindingssjabloontype voor deze binding.
Beleidsbeschrijvingen
Met de instelling voor invoerbeleid genereert wsutil een set beleidsbeschrijvingen die het invoerbeleid beschrijven, inclusief het sjabloontype, evenals de waarden die zijn opgegeven in het beleid. Bijvoorbeeld voor invoer
<wsdl:binding...>
<soap11:binding.../> =< WS_ENVELOPE_VERSION_SOAP_1_1
</wsdl:binding>
wsutil genereert een beschrijving van de kanaaleigenschap, zoals:
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),
},
Alle beleidsinstellingen (kanaaleigenschappen, beveiligingseigenschappen en eigenschappen van beveiligingsbindingen) in één binding worden samengevoegd in één WS_bindingTemplateType_POLICY_DESCRIPTION structuur. WS_BINDING_TEMPLATE_TYPE geeft de verschillende combinaties van bindingsbeleid wsutil ondersteunt.
Sjabloonstructuur die moet worden ingevuld door toepassing
Beleidsbeschrijving bevat alle beleidsinformatie die is opgegeven in invoermetagegevens voor een bepaalde binding, maar er zijn gegevens die niet kunnen worden weergegeven in het beleid, maar vereist gebruikersinvoer wanneer u deze beleidsinstelling gebruikt om een serviceproxy en/of service-eindpunt te maken. De toepassing moet bijvoorbeeld referenties opgeven voor HTTP-headerverificatie.
De toepassing moet de sjabloonstructuur, met de naam WS_bindingTemplateType_BINDING_TEMPLATE, invullen voor elk ander type bindingssjabloon, gedefinieerd in webservices.h:
struct WS_bindingTemplateType_BINDING_TEMPLATE
{
WS_CHANNEL_PROPERTIES channelProperties;
WS_SECURITY_PROPERTIES securityProperties;
possible_list_of_SECURITY_BINDING_TEMPLATEs;
...
};
De lijst met beveiligingsbindingssjablonen is optioneel, afhankelijk van de overeenkomende beveiligingsbinding. Het veld WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE wordt bijvoorbeeld weergegeven in WS_HTTP_SSL_BINDING_TEMPLATE voor toepassing om ssl-gerelateerde beveiligingsbindingsgegevens op te geven, inclusief de referentiegegevens.
De toepassing moet alle velden in deze structuur invullen voordat deze api's voor webservicessjablonen worden aangeroepen. Aanvullende beveiligingseigenschappen, evenals eigenschappen van beveiligingsbindingen die niet in beleid kunnen worden weergegeven, moeten worden ingevuld en webservices-API's voegen de twee eigenschappen in runtime samen. Velden kunnen worden uitgeschakeld als dit niet van toepassing is. SecurityProperties kunnen bijvoorbeeld worden uitgeschakeld als er geen extra beveiligingseigenschappen nodig zijn.
Helper-routines en beleidsbeschrijvingsdeclaratie in headerbestanden
wsutil maakt helperroutine om betere ondersteuning in de servicemodellaag te vergemakkelijken, zodat de toepassing serviceproxy en service-eindpunt eenvoudiger kan maken. De beleidsbeschrijving wordt ook weergegeven, zodat de toepassing deze rechtstreeks kan gebruiken. Een CreateSerivceProxy Help-routine ziet er als volgt uit:
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);
Ontwikkelaars worden aangemoedigd om deze helperroutines te gebruiken, maar ze kunnen ook de onderliggende runtimeroutine van webservices.dllgebruiken. Ontwikkelaars worden niet aangemoedigd om de beleidsbeschrijvingen rechtstreeks te gebruiken bij het programmeren met servicemodel laag.
Verwijzingen naar beleidsbeschrijvingen worden ook gegenereerd in de header voor geavanceerde gebruiker. Als ontwikkelaars geen servicemodelfunctionaliteit gebruiken, kunnen ze de beleidsbeschrijvingen rechtstreeks gebruiken.
struct {
...
struct {
...
} contracts;
struct {
WS_bindingTemplateType_POLICY_DESCRIPTION bindingName;
...
} policies;
}
Prototypen van definities in stub-bestanden
Eén structuurveld voor beleidsbeschrijvingen per binding en de intern verwezen helperbeschrijvingen worden gemaakt in de lokale prototypestructuur. De beleidsbeschrijvingen worden gegenereerd in het bestand waarin de WS_CONTRACT_DESCRIPTION wordt gegenereerd. Over het algemeen hoeven ontwikkelaars het stub-bestand tijdens de ontwikkeling niet te inspecteren, hoewel het stub-bestand alle details over de beleidsspecificaties bevat.
struct {
...
struct {
... } contracts;
...
struct {
struct {
hierarchy of policy template descriptions;
} bindingName;
...
list of bindings in the input wsdl file.
} policies;
} fileNameLocalDefinitions;
Implementatie van helperroutines in de stub-bestanden
Wsutil genereert helperroutines om toepassingsoproepen naar WsCreateServiceProxy- te vereenvoudigen en WS_SERVICE_ENDPOINT basis te maken op informatie in beleidsinstellingen.
Afhankelijk van de bindingsbeperkingen die zijn opgegeven voor de opgegeven poort, is het eerste argument anders op basis van de sjabloonstructuur. In het volgende voorbeeld wordt ervan uitgegaan dat HTTP-transport, handtekening voor het maken van de serviceproxy vergelijkbaar is met één extra parameter voor kanaaltypen.
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);
}
Ondersteunde beleidsinstellingen
De volgende tabel bevat alle ondersteunde bindingssjabloontypen, de overeenkomende beveiligingsbindingen die vereist zijn in het type, de sjabloonstructuur die moet worden ingevuld door de toepassing voor het type en het overeenkomende beschrijvingstype. De toepassing moet de sjabloonstructuur invullen, terwijl toepassingsontwikkelaar moet begrijpen wat de beveiligingsbindingen zijn die vereist zijn in het opgegeven beleid.
WS_HTTP_SSL_BINDING_TEMPLATE_TYPE geeft bijvoorbeeld aan dat het invoerbeleid voor de binding HTTP-transport aangeeft en WS_SSL_TRANSPORT_SECURITY_BINDING. De toepassing moet WS_HTTP_SSL_BINDING_TEMPLATE structuur invullen voordat de helperroutines worden aangeroepen en de beschrijving van het overeenkomende beleid wordt WS_HTTP_SSL_POLICY_DESCRIPTION. Meer specifiek bevat de bindingssectie in WSDL de volgende segmenten:
<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>
Ondersteuning voor beveiligingscontext
In Security Contextwordt het bootstrap-kanaal gemaakt om het beveiligde gesprek in het servicekanaal tot stand te brengen. Wsutil ondersteunt alleen het scenario waarbij bootstrap-kanaal hetzelfde is als het servicekanaal, met dezelfde kanaaleigenschappen en beveiligingseigenschappen. Transportbeveiliging is vereist voor binding van beveiligingscontextberichten; wsutil ondersteunt bootstrapkanalen met andere berichtbeveiligingsbindingen, maar ondersteunt alleen beveiligingscontext als de enige berichtbeveiligingsbinding in het servicekanaal, zonder combinatie met andere berichtbeveiligingsbindingen. Ontwikkelaars kunnen deze combinaties buiten de beleidssjabloonondersteuning ondersteunen.
De volgende inventarisatie maakt deel uit van beleidsondersteuning:
De volgende functies maken deel uit van beleidsondersteuning:
De volgende structuren maken deel uit van beleidsondersteuning:
- 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