Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

ServiceContractGenerator-Klasse

Aktualisiert: November 2007

Der System.ServiceModel.Description.ServiceContractGenerator-Typ generiert einen Dienstvertragscode und Bindungskonfigurationen von System.ServiceModel.Description.ServiceEndpoint-Beschreibungsobjekten.

Namespace:  System.ServiceModel.Description
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

public class ServiceContractGenerator
public class ServiceContractGenerator
public class ServiceContractGenerator

Verwenden Sie ServiceContractGenerator, um Tools zu erstellen oder den Standard-Vertragsgenerierungsprozess mit einer System.ServiceModel.Description.IWsdlImportExtension zu ändern.

Im folgenden Beispiel wird die Verwendung von ServiceContractGenerator gezeigt, um heruntergeladene Metadaten in Code zu konvertieren.

		static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
		{
      MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
      mexClient.ResolveMetadataReferences = true;
      MetadataSet metaDocs = mexClient.GetMetadata();

			WsdlImporter importer = new WsdlImporter(metaDocs);
      ServiceContractGenerator generator = new ServiceContractGenerator();

      // Add our custom DCAnnotationSurrogate 
      // to write XSD annotations into the comments.
      object dataContractImporter;
      XsdDataContractImporter xsdDCImporter;
      if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
      {
        Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
        xsdDCImporter = new XsdDataContractImporter();
        xsdDCImporter.Options = new ImportOptions();
        importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
      }
      else
      {
        xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
        if (xsdDCImporter.Options == null)
        {
          Console.WriteLine("There were no ImportOptions on the importer.");
          xsdDCImporter.Options = new ImportOptions();
        }
      }
      xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();

      // Uncomment the following code if you are going to do your work programmatically rather than add 
      // the WsdlDocumentationImporters through a configuration file. 
      /*
      // The following code inserts a custom WsdlImporter without removing the other 
      // importers already in the collection.
      System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
      System.Collections.Generic.List<IWsdlImportExtension> newExts 
        = new System.Collections.Generic.List<IWsdlImportExtension>();
      foreach (IWsdlImportExtension ext in exts)
      {
        Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
        newExts.Add(ext);
      }
      newExts.Add(new WsdlDocumentationImporter());
      System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
      importer = new WsdlImporter(metaDocs, polExts, newExts);
      */

      System.Collections.ObjectModel.Collection<ContractDescription> contracts 
        = importer.ImportAllContracts();
      importer.ImportAllEndpoints();
			foreach (ContractDescription contract in contracts)
			{
				generator.GenerateServiceContractType(contract);
			}
      if (generator.Errors.Count != 0)
        throw new Exception("There were errors during code compilation.");

      // Write the code dom
      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();
		}


System.Object
  System.ServiceModel.Description.ServiceContractGenerator

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0
Anzeigen: