語言

ServiceContractGenerator 類別

定義

此 ServiceContractGenerator 類型從描述物件產生服務合約程式碼與綁定配置 ServiceEndpoint 。

public ref class ServiceContractGenerator
public class ServiceContractGenerator
type ServiceContractGenerator = class
Public Class ServiceContractGenerator
繼承
ServiceContractGenerator

範例

以下範例展示了如何使用 a 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

建構函式

名稱 Description
ServiceContractGenerator()

用新ServiceContractGenerator實例初始化該CodeCompileUnit類別的新實例。

ServiceContractGenerator(CodeCompileUnit, Configuration)

初始化類別的新實例 ServiceContractGenerator ,包含指定的 CodeCompileUnit 實例與實 Configuration 例。

ServiceContractGenerator(CodeCompileUnit)

初始化該類別的新實例 ServiceContractGenerator ,並使用指定的 CodeCompileUnit 實例。

ServiceContractGenerator(Configuration)

初始化該類別的新實例 ServiceContractGenerator ,並使用指定的 Configuration 實例。

屬性

名稱 Description
Configuration

取得 Configuration 包含產生的綁定設定的實例。

Errors

取得一組 MetadataConversionError 在產生服務合約程式碼與端點設定時產生的物件集合。

NamespaceMappings

從合約描述命名空間到受管理命名空間的映射,用於產生程式碼。

Options

取得或設定產生服務合約代碼的選項。

ReferencedTypes

它能將合約描述映射到參考的合約類型。

TargetCompileUnit

取得產生服務合約程式碼的目標 CodeCompileUnit 物件。

方法

名稱 Description
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)

適用於