Gör så här: Importera anpassad WSDL
I det här avsnittet beskrivs hur du importerar anpassad WSDL. Om du vill hantera den anpassade WSDL:n måste du implementera IWsdlImportExtension gränssnittet.
Importera anpassad WSDL
Implementera IWsdlImportExtension. BeforeImport(ServiceDescriptionCollection, XmlSchemaSet, ICollection<XmlElement>) Implementera metoden för att ändra metadata innan den importeras. ImportEndpoint(WsdlImporter, WsdlEndpointConversionContext) Implementera metoderna och ImportContract(WsdlImporter, WsdlContractConversionContext) för att ändra kontrakt och slutpunkter som importerats från metadata. Om du vill komma åt det importerade kontraktet eller slutpunkten använder du motsvarande kontextobjekt (WsdlContractConversionContext eller 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."); } }
Konfigurera klientprogrammet så att det använder den anpassade WSDL-importören. Observera att om du använder Svcutil.exe bör du lägga till den här konfigurationen i konfigurationsfilen för 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>
Skapa en ny WsdlImporter instans (skicka in den MetadataSet instans som innehåller de WSDL-dokument som du vill importera) och anropa ImportAllContracts:
WsdlImporter importer = new WsdlImporter(metaDocs); System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();