private void AddReferencedTypesAndKnownContracts( ContractGenerationOptions options, WsdlImporter wsdlImporter, ServiceContractGenerator contractGenerator) { foreach (Type type in options.ReferencedTypes) { if (type.IsDefined(typeof(ServiceContractAttribute), false)) { try { ContractDescription contractDescription = ContractDescription.GetContract(type); XmlQualifiedName xmlName = new XmlQualifiedName(contractDescription.Name, contractDescription.Namespace); wsdlImporter.KnownContracts.Add(xmlName, contractDescription); contractGenerator.ReferencedTypes.Add(contractDescription, type); continue; } catch (Exception exception) { throw new TypeLoadException( string.Format(CultureInfo.CurrentCulture, Properties.Resources.ErrUnableToLoadReferenceType, type.AssemblyQualifiedName), exception); } } } }
private void AddStateForXmlSerializerImport(ContractGenerationOptions options, WsdlImporter wsdlImporter, CodeCompileUnit codeCompileUnit) { XmlSerializerImportOptions importOptions = new XmlSerializerImportOptions(codeCompileUnit); importOptions.WebReferenceOptions = new WebReferenceOptions(); importOptions.WebReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateOrder | CodeGenerationOptions.GenerateProperties; if (options.EnableDataBinding) { importOptions.WebReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.EnableDataBinding; } if (options.GenerateAsyncMethods) { importOptions.WebReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.GenerateNewAsync; } importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName); importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName); importOptions.CodeProvider = options.CodeProvider; string clrNamespace = null; options.NamespaceMappings.TryGetValue(ContractGenerationOptions.NamespaceMappingsAllKeyName, out clrNamespace); importOptions.ClrNamespace = clrNamespace; importOptions.WebReferenceOptions.Verbose = true; //importOptions.WebReferenceOptions.Style = ServiceDescriptionImportStyle.Client; wsdlImporter.State.Add(typeof(XmlSerializerImportOptions), importOptions); }
private ImportOptions CreateDataContractImportOptions(ContractGenerationOptions options) { ImportOptions importOptions = new ImportOptions(); importOptions.GenerateSerializable = options.GenerateSerializable; importOptions.GenerateInternal = options.GenerateInternalTypes; importOptions.ImportXmlType = options.ImportXmlType; importOptions.EnableDataBinding = options.EnableDataBinding; importOptions.CodeProvider = options.CodeProvider; foreach (Type type in options.ReferencedTypes) { importOptions.ReferencedTypes.Add(type); } foreach (Type type in options.ReferencedCollectionTypes) { importOptions.ReferencedCollectionTypes.Add(type); } foreach (KeyValuePair <string, string> pair in options.NamespaceMappings) { importOptions.Namespaces.Add(pair.Key, pair.Value); } return(importOptions); }
private void AddStateForDataContractSerializerImport(ContractGenerationOptions options, WsdlImporter wsdlImporter, CodeCompileUnit codeCompileUnit) { XsdDataContractImporter xsdImporter = new XsdDataContractImporter(codeCompileUnit); xsdImporter.Options = CreateDataContractImportOptions(options); wsdlImporter.State.Add(typeof(XsdDataContractImporter), xsdImporter); }
public void ShouldGenerateContractFromHostWithDefaultOptions() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\Empty.config"); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); ContractGeneratorCommonAsserts(generator, options); }
public void ShouldGenerateContractFromWsdlWithDefaultOptions() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\Empty.config", "ShouldGenerateContractFromWsdlWithDefaultOptions"); Uri wsdlLocation = new Uri(ConfigurationLoader.GetConfigurationFilePath(@"SampleData\DescriptionModel\MockService.wsdl")); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(wsdlLocation)); ContractGeneratorCommonAsserts(generator, options); }
private static ContractGenerator CreateContractGenerator() { ContractGenerationOptions options = new ContractGenerationOptions(); options.GenerateClientClass = false; options.GenerateChannelInterface = false; options.GenerateAsyncMethods = false; options.GenerateInternalTypes = false; options.GenerateSerializable = false; options.GenerateTypedMessages = false; options.ImportXmlType = true; options.SchemaImporterType = ContractGenerationOptions.ImporterType.All; return new ContractGenerator(options); }
private ServiceContractGenerator CreateServiceContractGenerator(ContractGenerationOptions options, System.Configuration.Configuration inputConfiguration, CodeCompileUnit codeCompileUnit) { ServiceContractGenerator generator = new ServiceContractGenerator(codeCompileUnit, inputConfiguration); SetContractGeneratorOptions(options, generator); foreach (KeyValuePair <string, string> pair in options.NamespaceMappings) { generator.NamespaceMappings.Add(pair.Key, pair.Value); } return(generator); }
private ContractGenerator CreateContractGenerator(bool importXmlType) { ContractGenerationOptions options = new ContractGenerationOptions(); ImportOptions importOptions = CreateImportOptions(importXmlType); options.GenerateClientClass = false; options.GenerateChannelInterface = false; options.GenerateAsyncMethods = false; options.GenerateInternalTypes = importOptions.GenerateInternal; options.GenerateSerializable = importOptions.GenerateSerializable; options.GenerateTypedMessages = false; options.ImportXmlType = importOptions.ImportXmlType; options.SchemaImporterType = importXmlType ? ContractGenerationOptions.ImporterType.XmlSerializerImporter : ContractGenerationOptions.ImporterType.XsdDataContractImporter; return(new ContractGenerator(options)); }
private void SetContractGeneratorOptions(ContractGenerationOptions options, ServiceContractGenerator contractGenerator) { if (options.GenerateAsyncMethods) { contractGenerator.Options |= ServiceContractGenerationOptions.AsynchronousMethods; } else { contractGenerator.Options &= ~ServiceContractGenerationOptions.AsynchronousMethods; } if (options.GenerateInternalTypes) { contractGenerator.Options |= ServiceContractGenerationOptions.InternalTypes; } else { contractGenerator.Options &= ~ServiceContractGenerationOptions.InternalTypes; } if (options.GenerateTypedMessages) { contractGenerator.Options |= ServiceContractGenerationOptions.TypedMessages; } else { contractGenerator.Options &= ~ServiceContractGenerationOptions.TypedMessages; } if (options.GenerateChannelInterface) { contractGenerator.Options |= ServiceContractGenerationOptions.ChannelInterface; } else { contractGenerator.Options &= ~ServiceContractGenerationOptions.ChannelInterface; } if (options.GenerateClientClass) { contractGenerator.Options |= ServiceContractGenerationOptions.ClientClass; } else { contractGenerator.Options &= ~ServiceContractGenerationOptions.ClientClass; } }
/// <summary> /// Initializes a new instance of the <see cref="T:ProxyGenerator"/> class. /// </summary> /// <param name="options">The options.</param> public ContractGenerator(ContractGenerationOptions options) { if (!string.IsNullOrEmpty(options.OutputConfigurationFile)) { System.Configuration.Configuration machineConfiguration = ConfigurationManager.OpenMachineConfiguration(); ExeConfigurationFileMap configurationMap = new ExeConfigurationFileMap(); configurationMap.ExeConfigFilename = options.OutputConfigurationFile; configurationMap.MachineConfigFilename = machineConfiguration.FilePath; this.configuration = ConfigurationManager.OpenMappedExeConfiguration(configurationMap, ConfigurationUserLevel.None); } else if (options.OutputConfiguration != null) { this.configuration = options.OutputConfiguration; } this.codeCompileUnit = new CodeCompileUnit(); this.options = options; this.generatedChannelElements = new Collection<ChannelEndpointElement>(); }
/// <summary> /// Initializes a new instance of the <see cref="T:ProxyGenerator"/> class. /// </summary> /// <param name="options">The options.</param> public ContractGenerator(ContractGenerationOptions options) { if (!string.IsNullOrEmpty(options.OutputConfigurationFile)) { System.Configuration.Configuration machineConfiguration = ConfigurationManager.OpenMachineConfiguration(); ExeConfigurationFileMap configurationMap = new ExeConfigurationFileMap(); configurationMap.ExeConfigFilename = options.OutputConfigurationFile; configurationMap.MachineConfigFilename = machineConfiguration.FilePath; this.configuration = ConfigurationManager.OpenMappedExeConfiguration(configurationMap, ConfigurationUserLevel.None); } else if (options.OutputConfiguration != null) { this.configuration = options.OutputConfiguration; } this.codeCompileUnit = new CodeCompileUnit(); this.options = options; this.generatedChannelElements = new Collection <ChannelEndpointElement>(); }
private ServiceContractGenerator CreateServiceContractGenerator(ContractGenerationOptions options, System.Configuration.Configuration inputConfiguration, CodeCompileUnit codeCompileUnit) { ServiceContractGenerator generator = new ServiceContractGenerator(codeCompileUnit, inputConfiguration); SetContractGeneratorOptions(options, generator); foreach (KeyValuePair<string, string> pair in options.NamespaceMappings) { generator.NamespaceMappings.Add(pair.Key, pair.Value); } return generator; }
public void ShouldMergeConfigContentWithSameEndpoint() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfigurationFile = ConfigurationLoader.GetConfigurationFilePath(@"SampleData\Empty.config", "ShouldMergeConfigContentWithSameEndpoint", true); string originalConfig = File.ReadAllText(options.OutputConfigurationFile); ContractGenerator generator = new ContractGenerator(options); MetadataSet metadata = GetMetadataSet(HostAddress); WsdlImporter importer = generator.CreateWsdlImporter(metadata); generator.Generate(importer); // generate twice in order to update and get only one endpoint in config generator.Generate(importer); Assert.AreNotEqual(originalConfig, File.ReadAllText(options.OutputConfigurationFile)); // Assert config file ServiceModelConfigurationManager manager = new ServiceModelConfigurationManager(generator.Configuration); ClientSection client = manager.GetClient(); Assert.AreEqual<int>(2, client.Endpoints.Count); }
public void ShouldGenerateAndSaveConfigFile() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfigurationFile = ConfigurationLoader.GetConfigurationFilePath(@"SampleData\Empty.config", "ShouldGenerateAndSaveConfigFile", true); string originalConfig = File.ReadAllText(options.OutputConfigurationFile); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); Assert.AreNotEqual(originalConfig, File.ReadAllText(options.OutputConfigurationFile)); }
public void ShouldGenerateProtectionLevelSignValueFromWsdlFile() { ContractGenerationOptions options = new ContractGenerationOptions(); ContractGenerator generator = new ContractGenerator(options); Uri wsdlLocation = new Uri(ConfigurationLoader.GetConfigurationFilePath(@"SampleData\DescriptionModel\MockService.wsdl")); generator.Generate(GetMetadataSet(wsdlLocation)); string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit); Assert.IsNotNull(proxyClass); Assert.IsTrue(proxyClass.Contains("ProtectionLevel.Sign"), "Contains ProtectionLevel value."); }
public void ThrowOnCustomWsdlImporterNotFound() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\DescriptionModel\WsdlImporterNotFound.config"); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); }
public void ShouldGenerateConfigFileWithWsHttpBinding() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfigurationFile = ConfigurationLoader.GetConfigurationFilePath(@"SampleData\Empty.config", "ShouldGenerateConfigFileWithWsHttpBinding"); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); string configFileContent = File.ReadAllText(options.OutputConfigurationFile); Assert.IsTrue(configFileContent.Contains("<wsHttpBinding>")); }
public void ShouldGenerateOneEndpointFromHostWithMultipleEndpoints() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\Empty.config"); options.ImportedEndpointNames.Add(Constants.ServiceDescription.WsHttpHostClientName); ContractGenerator generator = new ContractGenerator(options); MetadataSet metadata = GetMetadataSet(HostAddressMultiEndpoint); generator.Generate(GetMetadataSet(HostAddressMultiEndpoint)); ContractGeneratorCommonAsserts(generator, options); }
public void ShouldGenerateVBProxy() { ContractGenerationOptions options = new ContractGenerationOptions(); options.CodeProvider = new VBCodeProvider(); ContractGenerator generator = new ContractGenerator(options); Uri wsdlLocation = new Uri(ConfigurationLoader.GetConfigurationFilePath(@"SampleData\DescriptionModel\MockService.wsdl")); generator.Generate(GetMetadataSet(wsdlLocation)); string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit); Assert.IsNotNull(proxyClass); Assert.IsTrue(proxyClass.Contains("Public Sub New()"), "Contains VB code"); }
public void ShouldGenerateContractFromHostWithDataContractSerializerType() { ContractGenerationOptions options = new ContractGenerationOptions(); options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\Empty.config"); options.ClrNamespace = "Test.Namespace1"; ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit); Assert.IsNotNull(proxyClass); Assert.IsTrue(proxyClass.Contains(options.ClrNamespace), "Contains namespace"); Assert.IsTrue(proxyClass.Contains("MyDataContract"), "Contains MyDataContract class"); CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(proxyClass); Type generatedType = results.CompiledAssembly.GetType(options.ClrNamespace + ".MyDataContract", false); Assert.IsNotNull(generatedType); }
private ImportOptions CreateDataContractImportOptions(ContractGenerationOptions options) { ImportOptions importOptions = new ImportOptions(); importOptions.GenerateSerializable = options.GenerateSerializable; importOptions.GenerateInternal = options.GenerateInternalTypes; importOptions.ImportXmlType = options.ImportXmlType; importOptions.EnableDataBinding = options.EnableDataBinding; importOptions.CodeProvider = options.CodeProvider; foreach (Type type in options.ReferencedTypes) { importOptions.ReferencedTypes.Add(type); } foreach (Type type in options.ReferencedCollectionTypes) { importOptions.ReferencedCollectionTypes.Add(type); } foreach (KeyValuePair<string, string> pair in options.NamespaceMappings) { importOptions.Namespaces.Add(pair.Key, pair.Value); } return importOptions; }
private ContractGenerator CreateContractGenerator(bool importXmlType) { ContractGenerationOptions options = new ContractGenerationOptions(); ImportOptions importOptions = CreateImportOptions(importXmlType); options.GenerateClientClass = false; options.GenerateChannelInterface = false; options.GenerateAsyncMethods = false; options.GenerateInternalTypes = importOptions.GenerateInternal; options.GenerateSerializable = importOptions.GenerateSerializable; options.GenerateTypedMessages = false; options.ImportXmlType = importOptions.ImportXmlType; options.SchemaImporterType = importXmlType ? ContractGenerationOptions.ImporterType.XmlSerializerImporter : ContractGenerationOptions.ImporterType.XsdDataContractImporter; return new ContractGenerator(options); }
public void ShouldGenerateProtectionLevelSignValueFromHost() { ContractGenerationOptions options = new ContractGenerationOptions(); ContractGenerator generator = new ContractGenerator(options); generator.Generate(GetMetadataSet(HostAddress)); string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit); Assert.IsNotNull(proxyClass); Assert.IsTrue(proxyClass.Contains("ProtectionLevel.Sign"), "Contains ProtectionLevel value."); }
private void ContractGeneratorCommonAsserts(ContractGenerator generator, ContractGenerationOptions options) { // Assert proxy class string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit); Assert.IsNotNull(proxyClass); Assert.IsTrue(proxyClass.Contains("IMockServiceContract")); // Assert config file ServiceModelConfigurationManager manager = new ServiceModelConfigurationManager(generator.Configuration); ClientSection client = manager.GetClient(); Assert.AreEqual(1, client.Endpoints.Count); ChannelEndpointElement createdEndpoint = client.Endpoints[0]; Assert.AreEqual(Constants.Uris.TestContractGenerationEndpointAddress, createdEndpoint.Address.AbsoluteUri); Assert.AreEqual(Constants.ServiceDescription.WsHttpHostClientName, createdEndpoint.Name); Assert.AreEqual(Constants.ServiceDescription.WsHttpHostClientBinding, createdEndpoint.Binding); }