Postupy: Import metadat do koncových bodů služby
Toto téma vysvětluje, jak importovat metadata do kolekce koncových bodů služby a používat službu definovanou v části Začínáme. Toto téma ukazuje, jak vytvořit klientskou aplikaci, která importuje metadata ze služby a pak volá metodu Add
ve službě.
Import metadat do koncových bodů služby
EndpointAddress Deklarujte objekt a inicializujete ho pomocí identifikátoru URI (Uniform Resource Identifier) pro adresu výměny metadat (MEX) služby.
EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
Vytvořte MetadataExchangeClientadresu MEX a volejte GetMetadata. Tím se načte metadata ze služby.
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaSet = mexClient.GetMetadata();
WsdlImporterVytvořte , předejte metadata dříve načtena a volání ImportAllContracts. Tím se vygeneruje kolekce ContractDescription objektů. Můžete také zavolat ImportAllEndpoints nebo ImportAllBindingsv závislosti na vašich potřebách.
WsdlImporter importer = new WsdlImporter(metaSet); System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
Poznámka:
Po importu metadat nebudete moct vytvořit klientský kanál ani exportovat metadata. Důvodem je to, že v tuto chvíli nejsou k dispozici žádné informace o typu. Informace o typu se vyžadují k skutečné interakci se službou nebo exportem metadat. Pokud chcete vygenerovat informace o typu, musíte vygenerovat kód uvedený v krocích 4 a 5. Případně můžete použít pomocnou MetadataResolver třídu. Další informace naleznete v tématu Postupy: Použití MetadataResolver k dynamickému získání metadat vazby.
Vygenerujte informace o typu pro každý kontrakt.
ServiceContractGenerator generator = new ServiceContractGenerator(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) throw new Exception("There were errors during code compilation.");
Tyto informace teď můžete použít. Následující ukázka vygeneruje zdrojový kód jazyka C#.
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();