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

取得在產生程式碼時所使用的從合約描述命名空間到 Managed 命名空間的對應。

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)

適用於