次の方法で共有


メタデータのインポート

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 プロパティを上書きすることで、ホスト名の検証を無効にすることができます。 既定で実行されるホスト名チェックが無効になっている場合、アプリケーションは、他の方法で信頼していない別のパーティからのサービスのアドレスを含むメタデータ ドキュメントから自身を保護する必要があります。

既定では、メタデータの逆シリアル化と処理にメタデータ ランタイムが使用するメモリの最大量は 256,000 個で、追加できるドキュメントの最大数は 32 です。 これらの既定値は、WS_METADATA_PROPERTY_HEAP_REQUESTED_SIZE プロパティと WS_METADATA_PROPERTY_MAX_DOCUMENTS プロパティで上書きできます。 これらの境界は、ダウンロードの量を制限し、メタデータを蓄積するために割り当てられるメモリの量を制限するように設計されています。 これらの値を大きくすると、過剰なメモリ使用量、CPU 使用率、またはネットワーク帯域幅の消費につながる可能性があります。 バイナリ形式のディクショナリ文字列が拡張されるため、小さなメッセージは逆シリアル化された形式がはるかに大きくなる可能性があるため、バイナリ形式を使用する場合は、小さなメッセージに依存してメタデータ メモリの割り当てを制限するだけでは不十分です。

既定では、ポリシー代替の最大数は 32 ですが、WS_POLICY_PROPERTY_MAX_ALTERNATIVES プロパティで上書きできます。 アプリケーションが各代替候補をループして一致するものを探す場合は、一致を見つける前にすべての代替候補を検索する必要がある場合があります。 代替の最大数を増やすと、CPU 使用率が過剰になる可能性があります。

次の列挙体は、メタデータのインポートの一部です。

次の関数は、メタデータのインポートの一部です。

  • WsCreateMetadata
  • WsFreeMetadata
  • WsGetMetadataEndpoints
  • WsGetMetadataProperty
  • WsGetMissingMetadataDocumentAddress
  • WsGetPolicyAlternativeCount
  • WsGetPolicyProperty
  • WsMatchPolicyAlternative
  • WsReadMetadata
  • WsResetMetadata

次のハンドルは、メタデータのインポートの一部です。

次の構造は、メタデータのインポートの一部です。