次の方法で共有


MetadataImporter クラス

定義

メタデータを ServiceEndpoint オブジェクトにインポートします。

public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
継承
MetadataImporter
派生

System.ServiceModel.Description.WsdlImporter 派生クラスを使用してメタデータをインポートする例を次に示します。カスタム状態を使用してインポートし、Errors プロパティを確認し、インポートされたメタデータをマネージド型にコンパイルし、結果をコード ファイルに保存します。

  static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
  {
MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
mexClient.ResolveMetadataReferences = true;
MetadataSet metaDocs = mexClient.GetMetadata();

      WsdlImporter importer = new WsdlImporter(metaDocs);
ServiceContractGenerator generator = new ServiceContractGenerator();

// Add our custom DCAnnotationSurrogate
// to write XSD annotations into the comments.
object dataContractImporter;
XsdDataContractImporter xsdDCImporter;
if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
{
  Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
  xsdDCImporter = new XsdDataContractImporter();
  xsdDCImporter.Options = new ImportOptions();
  importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
}
else
{
  xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
  if (xsdDCImporter.Options == null)
  {
    Console.WriteLine("There were no ImportOptions on the importer.");
    xsdDCImporter.Options = new ImportOptions();
  }
}
xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();

// Uncomment the following code if you are going to do your work programmatically rather than add
// the WsdlDocumentationImporters through a configuration file.
/*
// The following code inserts a custom WsdlImporter without removing the other
// importers already in the collection.
System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
System.Collections.Generic.List<IWsdlImportExtension> newExts
  = new System.Collections.Generic.List<IWsdlImportExtension>();
foreach (IWsdlImportExtension ext in exts)
{
  Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
  newExts.Add(ext);
}
newExts.Add(new WsdlDocumentationImporter());
System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
importer = new WsdlImporter(metaDocs, polExts, newExts);
*/

System.Collections.ObjectModel.Collection<ContractDescription> contracts
  = importer.ImportAllContracts();
importer.ImportAllEndpoints();
      foreach (ContractDescription contract in contracts)
      {
          generator.GenerateServiceContractType(contract);
      }
if (generator.Errors.Count != 0)
  throw new Exception("There were errors during code compilation.");

// Write the code dom
System.CodeDom.Compiler.CodeGeneratorOptions options
  = new System.CodeDom.Compiler.CodeGeneratorOptions();
      options.BracingStyle = "C";
      System.CodeDom.Compiler.CodeDomProvider codeDomProvider
  = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
      System.CodeDom.Compiler.IndentedTextWriter textWriter
  = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
      codeDomProvider.GenerateCodeFromCompileUnit(
  generator.TargetCompileUnit, textWriter, options
);
      textWriter.Close();
  }

注釈

MetadataImporter 抽象クラスの実装を使用して、サービス メタデータをインポートします。 クラスから MetadataImporter 派生した型は、Windows Communication Foundation (WCF) のWS-Policy インポート ロジックを利用するメタデータ形式のインポートのサポートを実装します。

MetadataImporter の実装は、System.ServiceModel.Description.PolicyConversionContext オブジェクトでサービス メタデータに結び付けられたポリシー表現を収集します。 その後、MetadataImporter は、System.ServiceModel.Description.IPolicyImportExtension プロパティ内の MetadataImporter.PolicyImportExtensions インターフェイスの実装を呼び出すことによって、メタデータのインポートの一部として、ポリシーを処理します。

MetadataImporter インスタンスの System.ServiceModel.Description.IPolicyImportExtension プロパティに MetadataImporter.PolicyImportExtensions インターフェイスの独自の実装を追加することによって、新しいポリシー アサーションをインポートするためのサポートを MetadataImporter に追加できます。 または、アプリケーション構成ファイルにポリシー インポート拡張を登録することができます。

System.ServiceModel.Description.WsdlImporter 型は、WCF に含まれる MetadataImporter 抽象クラスの実装です。 System.ServiceModel.Description.WsdlImporter 型は、System.ServiceModel.Description.MetadataSet オブジェクトにまとめられた、結び付けられているポリシーを使用して WSDL メタデータをインポートします。

System.ServiceModel.Description.IWsdlImportExtension インターフェイスを実装し、この実装を WsdlImporter.WsdlImportExtensions インスタンスの System.ServiceModel.Description.WsdlImporter プロパティに追加することで、WSDL 拡張のインポートのサポートを追加できます。 System.ServiceModel.Description.WsdlImporter は、アプリケーション構成ファイルに登録された System.ServiceModel.Description.IWsdlImportExtension インターフェイスの実装を読み込むこともできます。

Note

MetadataImporter コンストラクターは内部用のため、このバージョンでは MetadataImporter から派生させることはできません。

プロパティ

Errors

メタデータのインポート中にエラーが発生したかどうかを示す値を取得します。

KnownContracts

インポーターが認識する名前でコントラクトのディクショナリを取得します。

PolicyImportExtensions

インポーターがポリシー アサーションを処理するために呼び出すポリシー インポーターのコレクションを取得します。

State

メタデータのインポートに使用するオブジェクトのコレクションを取得または設定します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
ImportAllContracts()

派生クラスでオーバーライドされると、メタデータからインポートされたコントラクトのコレクションを返します。

ImportAllEndpoints()

派生クラスでオーバーライドされると、メタデータ内のすべてのエンドポイントを返します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象