다음을 통해 공유


WsdlImporter.ImportAllContracts 메서드

정의

메타데이터 문서에서 포트 형식 정보를 나타내는 ContractDescription 개체 집합을 반환합니다.

public:
 override System::Collections::ObjectModel::Collection<System::ServiceModel::Description::ContractDescription ^> ^ ImportAllContracts();
public override System.Collections.ObjectModel.Collection<System.ServiceModel.Description.ContractDescription> ImportAllContracts ();
override this.ImportAllContracts : unit -> System.Collections.ObjectModel.Collection<System.ServiceModel.Description.ContractDescription>
Public Overrides Function ImportAllContracts () As Collection(Of ContractDescription)

반환

Collection<ContractDescription>

메타데이터 문서에서 포트 형식 정보를 나타내는 ContractDescription 개체 집합입니다.

예외

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

설명

메타데이터 문서에서 모든 WSDL 포트 형식 정보를 가져와서 ImportAllContracts 개체로 반환하려면 ContractDescription 메서드를 사용합니다. 반환된 개체를 사용하기 전에 Errors 속성을 검사하여 가져오기 오류가 있는지 여부를 확인하는 것이 좋습니다.

포트 형식을 하나만 가져오려면 ImportContract 메서드를 참조하십시오.

적용 대상