ServiceContractGenerator Class

 

The System.ServiceModel.Description.ServiceContractGenerator type generates service contract code and binding configurations from System.ServiceModel.Description.ServiceEndpoint description objects.

Namespace:   System.ServiceModel.Description
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

System.Object
  System.ServiceModel.Description.ServiceContractGenerator

Public Class ServiceContractGenerator

NameDescription
System_CAPS_pubmethodServiceContractGenerator()

Initializes a new instance of the ServiceContractGenerator class with a new System.CodeDom.CodeCompileUnit instance.

System_CAPS_pubmethodServiceContractGenerator(CodeCompileUnit)

Initializes a new instance of the ServiceContractGenerator class with the specified System.CodeDom.CodeCompileUnit instance.

System_CAPS_pubmethodServiceContractGenerator(CodeCompileUnit, Configuration)

Initializes a new instance of the ServiceContractGenerator class with the specified System.CodeDom.CodeCompileUnit instance and the specified System.Configuration.Configuration instance.

System_CAPS_pubmethodServiceContractGenerator(Configuration)

Initializes a new instance of the ServiceContractGenerator class with the specified System.Configuration.Configuration instance.

NameDescription
System_CAPS_pubpropertyConfiguration

Gets the System.Configuration.Configuration instance that contains the generated binding configurations.

System_CAPS_pubpropertyErrors

Gets a collection of System.ServiceModel.Description.MetadataConversionError objects generated when generating service contract code and endpoint configurations.

System_CAPS_pubpropertyNamespaceMappings

Gets a mapping from contract description namespaces to managed namespaces that is used when generating code.

System_CAPS_pubpropertyOptions

Gets or sets options for generating service contract code.

System_CAPS_pubpropertyReferencedTypes

Gets a mapping from contract descriptions to referenced contract types.

System_CAPS_pubpropertyTargetCompileUnit

Gets the target System.CodeDom.CodeCompileUnit object for generating service contract code.

NameDescription
System_CAPS_pubmethodEquals(Object)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_protmethodFinalize()

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.)

System_CAPS_pubmethodGenerateBinding(Binding, String, String)

Generates a binding configuration for the specified System.ServiceModel.Channels.Binding instance.

System_CAPS_pubmethodGenerateServiceContractType(ContractDescription)

Generates a service contract type from the specified System.ServiceModel.Description.ContractDescription instance.

System_CAPS_pubmethodGenerateServiceEndpoint(ServiceEndpoint, ChannelEndpointElement)

Generates a service contract type and an endpoint configuration from the specified System.ServiceModel.Description.ServiceEndpoint instance.

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_protmethodMemberwiseClone()

Creates a shallow copy of the current Object.(Inherited from Object.)

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

Use the ServiceContractGenerator to create tools or to modify the default contract generation process using an System.ServiceModel.Description.IWsdlImportExtension.

The following example shows the use of a ServiceContractGenerator to convert downloaded metadata into code.

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

.NET Framework
Available since 3.0

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: