다음을 통해 공유


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 형식은 구현의 MetadataImporter 추상 WCF에 포함 된 클래스입니다. 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 인터페이스의 구현을 로드할 수도 있습니다.

참고

MetadataImporter 생성자는 내부용이므로 이 버전의 MetadataImporter에서 파생시킬 수 없습니다.

속성

Errors

메타데이터를 가져오는 과정에서 오류가 발생했는지 여부를 나타내는 값을 가져옵니다.

KnownContracts

가져오기에 알려진 이름을 기준으로 계약 사전을 가져옵니다.

PolicyImportExtensions

가져오기에서 정책 어설션을 처리하기 위해 호출하는 정책 가져오기 컬렉션을 가져옵니다.

State

메타데이터 가져오기에 사용되는 개체 컬렉션을 가져오거나 설정합니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
ImportAllContracts()

파생 클래스에서 재정의되는 경우 메타데이터에서 가져온 계약 컬렉션을 반환합니다.

ImportAllEndpoints()

파생 클래스에서 재정의되는 경우 메타데이터의 모든 엔드포인트를 반환합니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상