次の方法で共有


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)

適用対象