Delen via


Procedure: Aangepaste WSDL importeren

In dit onderwerp wordt beschreven hoe u aangepaste WSDL importeert. Als u de aangepaste WSDL wilt afhandelen, moet u de IWsdlImportExtension interface implementeren.

Aangepaste WSDL importeren

  1. Implementeren IWsdlImportExtension. Implementeer de BeforeImport(ServiceDescriptionCollection, XmlSchemaSet, ICollection<XmlElement>) methode om de metagegevens te wijzigen voordat deze wordt geïmporteerd. Implementeer de ImportEndpoint(WsdlImporter, WsdlEndpointConversionContext) en ImportContract(WsdlImporter, WsdlContractConversionContext) methoden om contracten en eindpunten te wijzigen die zijn geïmporteerd uit de metagegevens. Als u toegang wilt krijgen tot het geïmporteerde contract of eindpunt, gebruikt u het bijbehorende contextobject (WsdlContractConversionContext of 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. Configureer de clienttoepassing voor het gebruik van de aangepaste WSDL-importfunctie. Als u Svcutil.exe gebruikt, moet u deze configuratie toevoegen aan het configuratiebestand voor Svcutil.exe (Svcutil.exe.config):

    <system.serviceModel>  
          <client>  
            <endpoint
              address="http://localhost:8000/Fibonacci"
              binding="wsHttpBinding"  
              contract="IFibonacci"  
            />  
            <metadata>  
              <wsdlImporters>  
                <extension type="Microsoft.WCF.Documentation.WsdlDocumentationImporter, WsdlDocumentation" />  
              </wsdlImporters>  
            </metadata>  
          </client>  
        </system.serviceModel>  
    
  3. Maak een nieuw WsdlImporter exemplaar (doorgeven in het MetadataSet exemplaar dat de WSDL-documenten bevat die u wilt importeren) en roep ImportAllContractshet volgende aan:

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

Zie ook