/// <summary> /// Create an appropriate WsdlImporter for the generator /// </summary> /// <param name="svcMapFile"></param> /// <param name="toolConfiguration"></param> /// <param name="targetCompileUnit"></param> /// <param name="codeDomProvider"></param> /// <param name="targetNamespace"></param> /// <param name="typeLoader"></param> /// <param name="targetFrameworkVersion">Targetted Framework version number</param> /// <param name="importErrors"></param> /// <param name="typedDataSetSchemaImporterExtension"></param> /// <returns></returns> protected static WsdlImporter CreateWsdlImporter(SvcMapFile svcMapFile, System.Configuration.Configuration toolConfiguration, CodeCompileUnit targetCompileUnit, System.CodeDom.Compiler.CodeDomProvider codeDomProvider, string targetNamespace, IServiceProvider serviceProviderForImportExtensions, IContractGeneratorReferenceTypeLoader typeLoader, int targetFrameworkVersion, IList<ProxyGenerationError> importErrors, System.Type typedDataSetSchemaImporterExtension) { List<MetadataSection> metadataSections = CollectMetadataDocuments(svcMapFile.MetadataList, importErrors); WsdlImporter importer = null; ClientOptions.ProxySerializerType serializerType = svcMapFile.ClientOptions.Serializer; if (serializerType == ClientOptions.ProxySerializerType.Auto && ContainsHttpBindings(metadataSections)) { // NOTE: HTTP Get/Post binding indicates an old web service. We use XmlSerializer to prevent generating dup classes. // Please check devdiv serializerType = ClientOptions.ProxySerializerType.XmlSerializer; } if (toolConfiguration != null) { ServiceModelSectionGroup serviceModelSection = ServiceModelSectionGroup.GetSectionGroup(toolConfiguration); if (serviceModelSection != null) { Collection<IWsdlImportExtension> wsdlImportExtensions = serviceModelSection.Client.Metadata.LoadWsdlImportExtensions(); Collection<IPolicyImportExtension> policyImportExtensions = serviceModelSection.Client.Metadata.LoadPolicyImportExtensions(); // If we have specified a specific serializer to use, we remove // the other serializer... switch (serializerType) { case ClientOptions.ProxySerializerType.DataContractSerializer: RemoveExtension(typeof(XmlSerializerMessageContractImporter), wsdlImportExtensions); break; case ClientOptions.ProxySerializerType.XmlSerializer: RemoveExtension(typeof(DataContractSerializerMessageContractImporter), wsdlImportExtensions); break; case ClientOptions.ProxySerializerType.Auto: break; default: System.Diagnostics.Debug.Fail("Unknown serializer"); break; } ProvideImportExtensionsWithContextInformation(svcMapFile, serviceProviderForImportExtensions, wsdlImportExtensions, policyImportExtensions); wsdlImportExtensions.Add(new HttpBindingExtension()); // Create Importer... importer = new WsdlImporter(new MetadataSet(metadataSections), policyImportExtensions, wsdlImportExtensions); } } if (importer == null) { importer = new WsdlImporter(new MetadataSet(metadataSections)); } // DevDiv 124333 - Always add DataContract importer (even if we are in XmlSerializerMode) to // enable importing Fault contracts... importer.State.Add(typeof(System.Runtime.Serialization.XsdDataContractImporter), CreateDataContractImporter(svcMapFile.ClientOptions, targetCompileUnit, codeDomProvider, targetNamespace, typeLoader, targetFrameworkVersion, importErrors)); if (serializerType != ClientOptions.ProxySerializerType.DataContractSerializer) { importer.State.Add(typeof(System.ServiceModel.Channels.XmlSerializerImportOptions), CreateXmlSerializerImportOptions(svcMapFile.ClientOptions, targetCompileUnit, codeDomProvider, targetNamespace, typedDataSetSchemaImporterExtension)); } // Read the UseSerializerForFaults from Reference.svcmap, create a FaultImportOptions using this information // and pass it to WSDL Importer. FaultImportOptions faultOptions = new FaultImportOptions(); faultOptions.UseMessageFormat = svcMapFile.ClientOptions.UseSerializerForFaults; importer.State.Add(typeof(System.ServiceModel.FaultImportOptions), faultOptions); // Read the WrappedOptions from Reference.svcmap, create a WrappedOptions using this information // and pass it to WSDL Importer. WrappedOptions wrappedOptions = new WrappedOptions(); wrappedOptions.WrappedFlag = svcMapFile.ClientOptions.Wrapped; importer.State.Add(typeof(System.ServiceModel.Channels.WrappedOptions), wrappedOptions); return importer; }
MessageContractImporter(WsdlImporter importer, WsdlContractConversionContext contractContext, SchemaImporter schemaImporter) { this.contractContext = contractContext; this.importer = importer; this.allSchemas = GatherSchemas(importer); this.schemaImporter = schemaImporter; object faultImportOptions; if (this.importer.State.TryGetValue(typeof(FaultImportOptions), out faultImportOptions)) this.faultImportOptions = (FaultImportOptions)faultImportOptions; else this.faultImportOptions = new FaultImportOptions(); }
private void AddFaultImportOptions() { FaultImportOptions faultImportOptions = new FaultImportOptions { UseMessageFormat = true }; wsdlImporter.State.Add(typeof(FaultImportOptions), faultImportOptions); }
/// <summary> /// Configures the WSDL importer to serialize faults using XmlSerializer. /// </summary> /// <param name="importer">The WSDL importer.</param> private static void AddStateForFaultSerializerImport(WsdlImporter importer) { var importOptions = new FaultImportOptions { UseMessageFormat = true }; importer.State.Add(typeof(FaultImportOptions), importOptions); }