Postupy: Import vlastního WSDL
Toto téma popisuje, jak importovat vlastní WSDL. Pokud chcete zpracovat vlastní WSDL, musíte implementovat IWsdlImportExtension rozhraní.
Import vlastního WSDL
Implementovat IWsdlImportExtension. Implementujte metodu pro úpravu BeforeImport(ServiceDescriptionCollection, XmlSchemaSet, ICollection<XmlElement>) metadat před importem. Implementujte a ImportContract(WsdlImporter, WsdlContractConversionContext) metody pro úpravu ImportEndpoint(WsdlImporter, WsdlEndpointConversionContext) kontraktů a koncových bodů importovaných z metadat. Pro přístup k importovanému kontraktu nebo koncovému bodu použijte odpovídající kontextový objekt (WsdlContractConversionContext nebo 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."); } }
Nakonfigurujte klientskou aplikaci tak, aby používala vlastní nástroj pro import WSDL. Všimněte si, že pokud používáte Svcutil.exe, měli byste tuto konfiguraci přidat do konfiguračního souboru pro 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>
Vytvořte novou WsdlImporter instanci (předejte MetadataSet instanci obsahující dokumenty WSDL, které chcete importovat) a volejte ImportAllContracts:
WsdlImporter importer = new WsdlImporter(metaDocs); System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();