다음을 통해 공유


방법: 사용자 지정 WSDL 가져오기

이 항목에서는 사용자 지정 WSDL을 가져오는 방법에 대해 설명합니다. 사용자 지정 WSDL을 처리하려면 IWsdlImportExtension 인터페이스를 구현해야 합니다.

사용자 지정 WSDL을 가져오려면

  1. IWsdlImportExtension를 구현해야 합니다. BeforeImport 메서드를 구현하여 메타데이터를 가져오기 전에 수정합니다. ImportEndpointImportContract 메서드를 구현하여 메타데이터에서 가져온 계약과 끝점을 수정합니다. 가져온 계약이나 끝점에 액세스하려면 해당 컨텍스트 개체(WsdlContractConversionContext 또는 WsdlEndpointConversionContext)를 사용합니다.

    public class WsdlDocumentationImporter : IWsdlImportExtension
       {
          public void ImportContract(WsdlImporter importer, WsdlContractConversionContext context)
    {
            // Contract documentation
         if (context.WsdlPortType.Documentation != null)
         {
               context.Contract.Behaviors.Add(new WsdlDocumentationImporter(context.WsdlPortType.Documentation));
    }
    // Operation documentation
    foreach (Operation operation in context.WsdlPortType.Operations)
    {
    if (operation.Documentation != null)
    {
    OperationDescription operationDescription = context.Contract.Operations.Find(operation.Name);
    if (operationDescription != null)
    {
                            operationDescription.Behaviors.Add(new WsdlDocumentationImporter(operation.Documentation));
    }
    }
    }
    }
    
    public void BeforeImport(ServiceDescriptionCollection wsdlDocuments, XmlSchemaSet xmlSchemas, ICollection<XmlElement> policy) 
            {
                Console.WriteLine("BeforeImport called.");
            }
    
    public void ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context) 
            {
                Console.WriteLine("ImportEndpoint called.");
            }
       }
    
  2. 사용자 지정 WSDL 가져오기를 사용하도록 클라이언트 응용 프로그램을 구성합니다. Svcutil.exe를 사용하는 경우 Svcutil.exe(Svcutil.exe.config)의 구성 파일에 이 구성을 추가해야 합니다.

    <system.serviceModel>
          <client>
            <endpoint 
              address="https://localhost:8000/Fibonacci" 
              binding="wsHttpBinding"
              contract="IFibonacci"
            />
            <metadata>
              <wsdlImporters>
                <extension type="Microsoft.WCF.Documentation.WsdlDocumentationImporter, WsdlDocumentation" />
              </wsdlImporters>
            </metadata>
          </client>
        </system.serviceModel>
    
  3. WsdlImporter 인스턴스(가져올 WSDL 문서를 포함하는 MetadataSet 인스턴스에 전달)를 만들고 ImportAllContracts를 호출합니다.

    WsdlImporter importer = new WsdlImporter(metaDocs);          System.Collections.ObjectModel.Collection<ContractDescription> contracts  = importer.ImportAllContracts();
    

참고 항목

개념

메타데이터
메타데이터 내보내기 및 가져오기

기타 리소스

Custom WSDL Publication