ServiceContractGenerator Класс

Определение

Тип ServiceContractGenerator создает код контракта службы и конфигурации привязок из объектов описания ServiceEndpoint.

public ref class ServiceContractGenerator
public class ServiceContractGenerator
type ServiceContractGenerator = class
Public Class ServiceContractGenerator
Наследование
ServiceContractGenerator

Примеры

В следующем примере показано, как использовать объект ServiceContractGenerator для преобразования загруженных метаданных в код.

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

Комментарии

Используйте объект ServiceContractGenerator для создания средств или для изменения процесса создания контракта по умолчанию с помощью объекта System.ServiceModel.Description.IWsdlImportExtension.

Конструкторы

ServiceContractGenerator()

Инициализирует новый экземпляр класса ServiceContractGenerator с новым экземпляром CodeCompileUnit.

ServiceContractGenerator(CodeCompileUnit)

Инициализирует новый экземпляр класса ServiceContractGenerator с указанным экземпляром CodeCompileUnit.

ServiceContractGenerator(CodeCompileUnit, Configuration)

Инициализирует новый экземпляр класса ServiceContractGenerator с указанным экземпляром CodeCompileUnit и указанным экземпляром Configuration.

ServiceContractGenerator(Configuration)

Инициализирует новый экземпляр класса ServiceContractGenerator с указанным экземпляром Configuration.

Свойства

Configuration

Возвращает экземпляр Configuration, содержащий созданные конфигурации привязок.

Errors

Возвращает коллекцию объектов MetadataConversionError, созданных при создании кода контракта службы и конфигураций конечных точек.

NamespaceMappings

Возвращает сопоставление из пространств имен описания контракта управляемым пространствам имен, которые используются при создании кода.

Options

Возвращает или устанавливает параметры для создания кода контракта службы.

ReferencedTypes

Возвращает сопоставление между описаниями контракта и типами контракта, на которые имеются ссылки.

TargetCompileUnit

Возвращает целевой объект CodeCompileUnit для создания кода контракта службы.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GenerateBinding(Binding, String, String)

Создает конфигурацию привязки для указанного экземпляра Binding.

GenerateServiceContractType(ContractDescription)

Создает тип контракта службы из указанного экземпляра ContractDescription.

GenerateServiceEndpoint(ServiceEndpoint, ChannelEndpointElement)

Создает тип контракта службы и конфигурацию конечной точки из указанного экземпляра ServiceEndpoint.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к