public ServiceClientProxyFactory GenerateProxyFactory(string serviceUrl) { Collection <MetadataSection> metadataSections = m_ServiceMetadataDownloader.DownloadMetadata(serviceUrl); ServiceMetadataInformation metadataInformation = m_ServiceMetadataImporter.ImportMetadata(metadataSections, MetadataImporterSerializerFormatMode.DataContractSerializer); ServiceClientProxyCompileResult clientProxyCompileResult = m_ServiceClientProxyCompiler.CompileProxy(metadataInformation); return(new ServiceClientProxyFactory(clientProxyCompileResult)); }
public ServiceClientProxyCompileResult CompileProxy(ServiceMetadataInformation serviceMetadataInfo) { string tempConfigFileName = CreateTempConfigFile(); CodeCompileUnit codeCompileUnit = serviceMetadataInfo.CodeCompileUnit; ServiceContractGenerator contractGenerator = new ServiceContractGenerator(codeCompileUnit, CreateConfig(new FileInfo(tempConfigFileName))); contractGenerator.Options |= ServiceContractGenerationOptions.ClientClass; for (int i = 0; i < serviceMetadataInfo.Contracts.Count; i++) { ContractDescription contract = serviceMetadataInfo.Contracts[i]; contractGenerator.GenerateServiceContractType(contract); } bool success = true; Collection <MetadataConversionError> contractGenErrors = contractGenerator.Errors; if (contractGenErrors != null) { foreach (MetadataConversionError error in contractGenErrors) { if (!error.IsWarning) { success = false; break; } } } if (!success) { //TODO: Throw exception } CodeDomProvider codeDomProvider = serviceMetadataInfo.CodeDomProvider; string proxyCode = CreateProxyCode(codeDomProvider, codeCompileUnit); CompilerParameters compilerParameters = new CompilerParameters(); AddAssemblyReference(typeof(ServiceContractAttribute).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(System.Web.Services.Description.ServiceDescription).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(DataContractAttribute).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(XmlElement).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(Uri).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(DataSet).Assembly, compilerParameters.ReferencedAssemblies); CompilerResults results = codeDomProvider.CompileAssemblyFromSource(compilerParameters, proxyCode); CompilerErrorCollection compileErrors = results.Errors; Assembly compiledAssembly = Assembly.LoadFile(results.PathToAssembly); return(new ServiceClientProxyCompileResult(serviceMetadataInfo, compiledAssembly, GenerateConfig(contractGenerator, serviceMetadataInfo.Endpoints, tempConfigFileName))); }
public ServiceClientProxyCompileResult CompileProxy(ServiceMetadataInformation serviceMetadataInfo) { string tempConfigFileName = CreateTempConfigFile(); CodeCompileUnit codeCompileUnit = serviceMetadataInfo.CodeCompileUnit; ServiceContractGenerator contractGenerator = new ServiceContractGenerator(codeCompileUnit, CreateConfig(new FileInfo(tempConfigFileName))); contractGenerator.Options |= ServiceContractGenerationOptions.ClientClass; for (int i = 0; i < serviceMetadataInfo.Contracts.Count; i++) { ContractDescription contract = serviceMetadataInfo.Contracts[i]; contractGenerator.GenerateServiceContractType(contract); } bool success = true; Collection<MetadataConversionError> contractGenErrors = contractGenerator.Errors; if (contractGenErrors != null) { foreach (MetadataConversionError error in contractGenErrors) { if (!error.IsWarning) { success = false; break; } } } if (!success) { //TODO: Throw exception } CodeDomProvider codeDomProvider = serviceMetadataInfo.CodeDomProvider; string proxyCode = CreateProxyCode(codeDomProvider, codeCompileUnit); CompilerParameters compilerParameters = new CompilerParameters(); AddAssemblyReference(typeof(ServiceContractAttribute).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(System.Web.Services.Description.ServiceDescription).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(DataContractAttribute).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(XmlElement).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(Uri).Assembly, compilerParameters.ReferencedAssemblies); AddAssemblyReference(typeof(DataSet).Assembly, compilerParameters.ReferencedAssemblies); CompilerResults results = codeDomProvider.CompileAssemblyFromSource(compilerParameters, proxyCode); CompilerErrorCollection compileErrors = results.Errors; Assembly compiledAssembly = Assembly.LoadFile(results.PathToAssembly); return new ServiceClientProxyCompileResult(serviceMetadataInfo, compiledAssembly, GenerateConfig(contractGenerator, serviceMetadataInfo.Endpoints, tempConfigFileName)); }
public ServiceClientProxyCompileResult(ServiceMetadataInformation serviceMetadataInformation, Assembly compiledAssembly, string config) { Config = config; CompiledAssembly = compiledAssembly; ServiceMetadataInformation = serviceMetadataInformation; }