Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #4
0
 public ServiceClientProxyCompileResult(ServiceMetadataInformation serviceMetadataInformation, Assembly compiledAssembly, string config)
 {
     Config                     = config;
     CompiledAssembly           = compiledAssembly;
     ServiceMetadataInformation = serviceMetadataInformation;
 }
 public ServiceClientProxyCompileResult(ServiceMetadataInformation serviceMetadataInformation, Assembly compiledAssembly, string config)
 {
     Config = config;
     CompiledAssembly = compiledAssembly;
     ServiceMetadataInformation = serviceMetadataInformation;
 }