メタデータのインポート
WWSAPI には、エンドポイントとの通信に使用できる情報を抽出することを目的として、エンドポイントから WSDL とポリシーを処理するために使用できる API 要素が含まれています。 通常、これらの API は、エンドポイントでサポートされている通信プロトコルがまだ不明な場合に使用されます。
メタデータを処理するには、次のシーケンスを使用します。
WsCreateMetadata // create a metadata object
while there are metadata documents to add
{
// retrieve the metadata document from it's location
// (download, read from file, etc)
// add the document to the metadata object
WsReadMetadata
// optionally query the metadata object for any missing documents
WsGetMissingMetadataDocumentAddress?
}
// get the endpoints from the metadata object
WsGetMetadataEndpoints
for each endpoint
{
// examine the endpoint information to see if
// the endpoint is relevant for the particular scenario
if the endpoint is relevant
{
// get the policy object from the endpoint
// get the number of policy alternatives in the policy
WsGetPolicyAlternativeCount
for each policy alternative
{
// construct a policy constraints structure that specifies
// what policy is acceptable and what information to extract
// from the policy
// see if the policy alternative matches the constraints
WsMatchPolicyAlternative
// if there is a match, then use it
// if there is not a match, then it is also possible to
// try with a different constraint structure
}
}
}
// If reusing the metadata object for a different set of documents
WsResetMetadata? // reset metadata object, which removes all documents
WsFreeMetadata // free the metadata object
WSDL アサーションと WS-Policy アサーションが API にどのように対応するかについては、 メタデータ マッピング に関するトピックを参照してください。
セキュリティ
ダウンロードされたメタデータは、ダウンロードに使用されるアドレスと同じくらい適切です。 アプリケーションでは、 がアドレスを信頼していることを確認する必要があります。 また、アプリケーションでは、セキュリティ プロトコルを使用して、メタデータの改ざんを許可しないメタデータ ドキュメントをダウンロードする必要があります。
アプリケーションは、メタデータによって公開されるサービスのアドレスを検査する必要があります。 既定では、ランタイムは、サービスのホスト名がメタデータのダウンロードに使用された元の URL のホスト名と一致することを保証しますが、アプリケーションは追加のチェックを実行する必要がある場合があります。 アプリケーションは、WS_METADATA_PROPERTY_VERIFY_HOST_NAMES プロパティを上書きすることで、ホスト名の検証 を 無効にすることができます。 既定で実行されるホスト名チェックが無効になっている場合、アプリケーションは、他の方法で信頼していない別のパーティからのサービスのアドレスを含むメタデータ ドキュメントから保護する必要があります。
既定では、メタデータの逆シリアル化と処理にメタデータ ランタイムによって使用されるメモリの最大量は 256k で、追加できるドキュメントの最大数は 32 です。 これらの既定値は、 WS_METADATA_PROPERTY_HEAP_REQUESTED_SIZE および WS_METADATA_PROPERTY_MAX_DOCUMENTS プロパティで上書きできます。 これらの境界は、ダウンロードの量を制限し、メタデータを蓄積するために割り当てられるメモリの量を制限するように設計されています。 これらの値を大きくすると、過剰なメモリ使用量、CPU 使用率、またはネットワーク帯域幅の消費につながる可能性があります。 バイナリ形式でのディクショナリ文字列の拡張により、小さなメッセージが逆シリアル化された形式になる可能性があるため、小さなメッセージを使用してメタデータ メモリの割り当てを制限するだけでは、バイナリ形式を使用する場合には十分ではないことに注意してください。
既定では、ポリシー代替の最大数は 32 ですが、 WS_POLICY_PROPERTY_MAX_ALTERNATIVES プロパティで上書きできます。 アプリケーションが各代替手段をループして一致するものを探す場合は、一致を見つける前に、すべての代替候補を検索する必要がある場合があります。 代替の最大数を増やすと、CPU 使用率が過剰になる可能性があります。
次の列挙は、メタデータのインポートの一部です。
- WS_METADATA_PROPERTY_ID
- WS_METADATA_STATE
- WS_POLICY_EXTENSION_TYPE
- WS_POLICY_PROPERTY_ID
- WS_POLICY_STATE
- WS_SECURITY_BINDING_CONSTRAINT_TYPE
次の関数は、メタデータのインポートの一部です。
- WsCreateMetadata
- WsFreeMetadata
- WsGetMetadataEndpoints
- WsGetMetadataProperty
- WsGetMissingMetadataDocumentAddress
- WsGetPolicyAlternativeCount
- WsGetPolicyProperty
- WsMatchPolicyAlternative
- WsReadMetadata
- WsResetMetadata
次のハンドルは、メタデータのインポートの一部です。
次の構造は、メタデータインポートの一部です。
- WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_CHANNEL_PROPERTY_CONSTRAINT
- WS_ENDPOINT_POLICY_EXTENSION
- WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT
- WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_METADATA_ENDPOINT
- WS_METADATA_ENDPOINTS
- WS_METADATA_PROPERTY
- WS_POLICY_CONSTRAINTS
- WS_POLICY_EXTENSION
- WS_POLICY_PROPERTIES
- WS_POLICY_PROPERTY
- WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT
- WS_SECURITY_BINDING_CONSTRAINT
- WS_SECURITY_BINDING_PROPERTY_CONSTRAINT
- WS_SECURITY_CONSTRAINTS
- WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_SECURITY_PROPERTY_CONSTRAINT
- WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT
- WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT
- WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT