ServiceContractGenerator Classe

Definizione

Il ServiceContractGenerator tipo genera il codice del contratto di servizio e le configurazioni di associazione dagli ServiceEndpoint oggetti description.

public ref class ServiceContractGenerator
public class ServiceContractGenerator
type ServiceContractGenerator = class
Public Class ServiceContractGenerator
Ereditarietà
ServiceContractGenerator

Esempio

Nell'esempio seguente viene illustrato l'uso di un ServiceContractGenerator oggetto per convertire i metadati scaricati nel codice.

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

Commenti

ServiceContractGenerator Utilizzare per creare strumenti o per modificare il processo di generazione del contratto predefinito usando un oggetto System.ServiceModel.Description.IWsdlImportExtension.

Costruttori

Nome Descrizione
ServiceContractGenerator()

Inizializza una nuova istanza della ServiceContractGenerator classe con una nuova CodeCompileUnit istanza.

ServiceContractGenerator(CodeCompileUnit, Configuration)

Inizializza una nuova istanza della ServiceContractGenerator classe con l'istanza specificata CodeCompileUnit e l'istanza specificata Configuration .

ServiceContractGenerator(CodeCompileUnit)

Inizializza una nuova istanza della ServiceContractGenerator classe con l'istanza specificata CodeCompileUnit .

ServiceContractGenerator(Configuration)

Inizializza una nuova istanza della ServiceContractGenerator classe con l'istanza specificata Configuration .

Proprietà

Nome Descrizione
Configuration

Ottiene l'istanza Configuration che contiene le configurazioni di associazione generate.

Errors

Ottiene una raccolta di oggetti generati durante la generazione di MetadataConversionError configurazioni di codice e endpoint del contratto di servizio.

NamespaceMappings

Ottiene un mapping dagli spazi dei nomi della descrizione del contratto agli spazi dei nomi gestiti utilizzati durante la generazione di codice.

Options

Ottiene o imposta le opzioni per la generazione del codice del contratto di servizio.

ReferencedTypes

Ottiene un mapping dalle descrizioni dei contratti ai tipi di contratto a cui si fa riferimento.

TargetCompileUnit

Ottiene l'oggetto di destinazione CodeCompileUnit per la generazione del codice del contratto di servizio.

Metodi

Nome Descrizione
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GenerateBinding(Binding, String, String)

Genera una configurazione di associazione per l'istanza specificata Binding .

GenerateServiceContractType(ContractDescription)

Genera un tipo di contratto di servizio dall'istanza specificata ContractDescription .

GenerateServiceEndpoint(ServiceEndpoint, ChannelEndpointElement)

Genera un tipo di contratto di servizio e una configurazione endpoint dall'istanza specificata ServiceEndpoint .

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a