Anvisningar: Importera metadata till tjänstslutpunkter
Det här avsnittet beskriver hur du importerar metadata till en samling tjänstslutpunkter och använder tjänsten som definieras i Komma igång. Det här avsnittet visar hur du skapar ett klientprogram som importerar metadata från tjänsten och sedan anropar Add
metoden för tjänsten.
Importera metadata till tjänstslutpunkter
Deklarera ett EndpointAddress objekt och initiera det med URI(Uniform Resource Identifier) för tjänstens MEX-adress (Metadata Exchange).
EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
Skapa en MetadataExchangeClient, skicka in MEX-adressen och anropa GetMetadata. Detta hämtar metadata från tjänsten.
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaSet = mexClient.GetMetadata();
Skapa en WsdlImporter, skicka in metadata som tidigare hämtats och anropa ImportAllContracts. Detta genererar en samling ContractDescription objekt. Du kan också ringa ImportAllEndpoints eller ImportAllBindings, beroende på dina behov.
WsdlImporter importer = new WsdlImporter(metaSet); System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
Kommentar
När du har importerat metadata kan du inte skapa en klientkanal eller exportera metadata. Det beror på att ingen typinformation är tillgänglig just nu. Typinformation krävs för att interagera med tjänsten eller exportera metadata. För att generera typinformationen måste du generera kod, som visas i steg 4 och 5. Du kan också använda hjälpklassen MetadataResolver . Mer information finns i How to: Use MetadataResolver to Obtain Binding Metadata Dynamically (Använda MetadataResolver för att hämta bindningsmetadata dynamiskt).
Generera typinformation för varje 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.");
Nu kan du använda den här informationen. Följande exempel genererar C#-källkod.
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();