WsdlImporter クラス

定義

WS-Policy が添付された Web サービス記述言語 (WSDL) 1.1 メタデータをインポートします。

public ref class WsdlImporter : System::ServiceModel::Description::MetadataImporter
public class WsdlImporter : System.ServiceModel.Description.MetadataImporter
type WsdlImporter = class
    inherit MetadataImporter
Public Class WsdlImporter
Inherits MetadataImporter
継承
WsdlImporter

WsdlImporter を使用して、カスタムの System.Runtime.Serialization.IDataContractSurrogate の追加、すべてのコントラクトのインポート、およびコントラクトのコンパイルとそのファイルへの保存を行う方法を次のコード例に示します。

  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();
  }

注釈

WsdlImporter クラスを使用して、メタデータをインポートすると共に、その情報を、コントラクトおよびエンドポイント情報を表すさまざまなクラスに変換します。

WsdlImporter の基本クラスである MetadataImporter クラスは、コントラクトおよびエンドポイントの情報やプロパティを選択的にインポートするメソッドを定義します。これらのコントラクトおよびエンドポイントの情報やプロパティは、インポート エラーを公開し、インポートおよび変換プロセスに関連する型情報を受け取ります。 WsdlImporter 型は、親の型のカスタム ポリシー インポーター (IPolicyImportExtension の実装) を使用してカスタム ポリシー ステートメントを処理し、独自のカスタム WSDL インポーター (IWsdlImportExtension の実装) を使用してカスタム WSDL 要素を処理します。 詳細については、「 メタデータ システムの拡張」を参照してください。

WSDL ドキュメントからポリシーをインポートするときに、WsdlImporter は、異なる WSDL ポリシー サブジェクトに結び付けられている最大 32 種類のポリシー代替手段の組み合わせを試します。 どの組み合わせを使用しても完全にインポートできない場合は、最初の組み合わせを使用して部分カスタム バインドが作成されます。

これらのメソッドおよびプロパティに加えて、WsdlImporter は、ポリシー ドキュメント、WSDL ドキュメント、WSDL 拡張、および XML スキーマ ドキュメントへのアクセスを提供するバインディング情報およびプロパティのインポートをサポートするメソッドも実装します。 カスタム WSDL 要素をサポートするための WsdlImporter の拡張については、IWsdlImportExtension を参照してください。

通常、WsdlImporter クラスは、3 つの手順から成るプロセスで使用されます。

  1. WsdlImporter オブジェクトを作成し、コンストラクターに MetadataSet オブジェクトを渡します。

  2. 適切な Import メソッドを呼び出して結果を取得します。

  3. Errors プロパティを調べて、インポート エラーがあるかどうかを判断します。

注意

WSDL ポートの種類をインポートするときに、ポートの種類の QName が KnownContracts ディクショナリ内のエントリに一致する場合、ポートの種類はインポートされず、既知のコントラクトが代わりに使用されます。

いずれかのインポート メソッドが呼び出されるまで、WsdlImporter プロパティからは値は返されません。 カスタム System.ServiceModel.Description.IWsdlImportExtension オブジェクトは、プログラムで読み込むか、クライアント構成 <wsdlImporters> 要素を使用して読み込WsdlImporterむことができます。

サービス エンドポイントとしてインポートされたメタデータは、ランタイムの作成やメタデータのエクスポートには使用できません。これは、インポートされたエンドポイントにマネージド型の情報が含まれないからです。 メタデータを使用してクライアントまたはサービスのランタイムを作成したりメタデータを生成したりするには、最初にメタデータからコードを生成してコンパイルし、その型情報を使用して、System.ServiceModel.Description.ContractDescription によって新しい GetContract オブジェクトを生成します。

コンストラクター

WsdlImporter(MetadataSet)

WsdlImporter クラスの新しいインスタンスを初期化します。

WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>)

指定したメタデータ、カスタム ポリシー インポーター、およびカスタム WSDL インポーターから WsdlImporter オブジェクトを作成します。

WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas)

指定したメタデータ、カスタム ポリシー インポーター、およびカスタム WSDL インポーターから WsdlImporter オブジェクトを作成します。

プロパティ

Errors

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

(継承元 MetadataImporter)
KnownContracts

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

(継承元 MetadataImporter)
PolicyImportExtensions

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

(継承元 MetadataImporter)
State

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

(継承元 MetadataImporter)
WsdlDocuments

メタデータ ドキュメント内のコントラクト情報を記述する ServiceDescription オブジェクトのセットを取得します。

WsdlImportExtensions

カスタムの WSDL 情報のインポートに使用される一連の IWsdlImportExtension オブジェクトのセットを取得します。

XmlSchemas

メタデータに含まれる型を記述する XmlSchema オブジェクトのセットを取得します。

メソッド

Equals(Object)

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

(継承元 Object)
GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
ImportAllBindings()

メタデータ ドキュメントからインポートされる一連の Binding オブジェクトを返します。

ImportAllContracts()

メタデータ ドキュメント内のポートの種類についての情報を表す一連の ContractDescription オブジェクトを返します。

ImportAllEndpoints()

WSDL ドキュメント内のエンドポイントを表す ServiceEndpointCollection を返します。

ImportBinding(Binding)

一連のメタデータ ドキュメントから、バインディング情報を表す Binding オブジェクトを返します。

ImportContract(PortType)

指定したポートの種類についての情報によって検索されたメタデータを表す ContractDescription オブジェクトを返します。

ImportEndpoint(Port)

指定した ServiceEndpoint オブジェクトの情報を使用する一連のメタデータ ドキュメント内のバインディング情報を表す Port を返します。

ImportEndpoints(Binding)

指定した ServiceEndpointCollection を使用しているすべての WSDL ポートの種類を表す Binding を返します。

ImportEndpoints(PortType)

指定した ServiceEndpointCollection に関連付けられているすべての WSDL ポートの種類を表す PortType を返します。

ImportEndpoints(Service)

指定した ServiceEndpointCollection 内のすべての WSDL ポートの種類を表す Service を返します。

MemberwiseClone()

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

(継承元 Object)
ToString()

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

(継承元 Object)

適用対象