ServiceContractGenerator 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此 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) |