ServiceContractGenerator Classe

Definizione

Il tipo di classe ServiceContractGenerator genera codice del contratto di servizio e configurazioni dell'associazione dagli oggetti della descrizione ServiceEndpoint.

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

Esempio

Nell'esempio seguente viene illustrato come utilizzare ServiceContractGenerator per convertire in codice i metadati scaricati.

  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

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

Costruttori

ServiceContractGenerator()

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

ServiceContractGenerator(CodeCompileUnit)

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

ServiceContractGenerator(CodeCompileUnit, Configuration)

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

ServiceContractGenerator(Configuration)

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

Proprietà

Configuration

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

Errors

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

NamespaceMappings

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

Options

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

ReferencedTypes

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

TargetCompileUnit

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

Metodi

Equals(Object)

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

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

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

GenerateServiceContractType(ContractDescription)

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

GenerateServiceEndpoint(ServiceEndpoint, ChannelEndpointElement)

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

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a