Teilen über


ServiceContractGenerator Klasse

Definition

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

public ref class ServiceContractGenerator
public class ServiceContractGenerator
type ServiceContractGenerator = class
Public Class ServiceContractGenerator
Vererbung
ServiceContractGenerator

Beispiele

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();
  }

Hinweise

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

Konstruktoren

ServiceContractGenerator()

Initialisiert eine neue Instanz der ServiceContractGenerator-Klasse mit einer neuen CodeCompileUnit-Instanz.

ServiceContractGenerator(CodeCompileUnit)

Initialisiert eine neue Instanz der ServiceContractGenerator-Klasse mit der angegebenen CodeCompileUnit-Instanz.

ServiceContractGenerator(CodeCompileUnit, Configuration)

Initialisiert eine neue Instanz der ServiceContractGenerator-Klasse mit der angegebenen CodeCompileUnit-Instanz und der angegebenen Configuration-Instanz.

ServiceContractGenerator(Configuration)

Initialisiert eine neue Instanz der ServiceContractGenerator-Klasse mit der angegebenen Configuration-Instanz.

Eigenschaften

Configuration

Ruft die Configuration-Instanz ab, die die generierten Bindungskonfigurationen enthält.

Errors

Ruft eine Auflistung von MetadataConversionError-Objekten ab, die beim Generieren des Dienstvertragscodes und der Endpunktkonfigurationen generiert werden.

NamespaceMappings

Ruft aus Vertragsbeschreibungsnamespaces eine Zuordnung zu verwalteten Namespaces ab, die beim Generieren von Code verwendet wird.

Options

Ruft Optionen zum Generieren des Dienstvertragscodes ab oder legt sie fest.

ReferencedTypes

Ruft eine Zuordnung von Vertragsbeschreibungen zu referenzierten Vertragstypen ab.

TargetCompileUnit

Ruft das Ziel-CodeCompileUnit-Objekt ab, um Dienstvertragscode zu generieren.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GenerateBinding(Binding, String, String)

Generiert eine Bindungskonfiguration für die angegebene Binding-Instanz.

GenerateServiceContractType(ContractDescription)

Generiert einen Dienstvertragstyp von der angegebenen ContractDescription-Instanz.

GenerateServiceEndpoint(ServiceEndpoint, ChannelEndpointElement)

Generiert einen Dienstvertragstyp und eine Endpunktkonfiguration von der angegebenen ServiceEndpoint-Instanz.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: