예제 #1
1
    object CreateWebServiceFromWsdl(byte[] wsdl) {
        // generate CodeDom from WSDL
        ServiceDescription sd = ServiceDescription.Read(new MemoryStream(wsdl));
        ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
        importer.ServiceDescriptions.Add(sd);
        CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
        CodeNamespace codeNamespace = new CodeNamespace("");
        codeCompileUnit.Namespaces.Add(codeNamespace);
        importer.CodeGenerationOptions = CodeGenerationOptions.GenerateNewAsync | CodeGenerationOptions.GenerateOldAsync;
        importer.Import(codeNamespace, codeCompileUnit);

        // update web service proxy CodeDom tree to add dynamic support
        string wsProxyTypeName = FindProxyTypeAndAugmentCodeDom(codeNamespace);
        // compile CodeDom tree into an Assembly
        CodeDomProvider provider = CodeDomProvider.CreateProvider("CS");
        CompilerParameters compilerParams = new CompilerParameters();
        compilerParams.GenerateInMemory = true;
        compilerParams.IncludeDebugInformation = false;
        compilerParams.ReferencedAssemblies.Add(typeof(Ops).Assembly.Location); //DLR
        CompilerResults results = provider.CompileAssemblyFromDom(compilerParams, codeCompileUnit);
        Assembly generatedAssembly = results.CompiledAssembly;

        // find the type derived from SoapHttpClientProtocol
        Type wsProxyType = generatedAssembly.GetType(wsProxyTypeName);

        if (wsProxyType == null) {
            throw new InvalidOperationException("Web service proxy type not generated.");
        }

        // create an instance of the web proxy type
        return Activator.CreateInstance(wsProxyType);
    }
예제 #2
0
        /// <summary<
        /// Constructor
        /// </summary<
        /// <param name="url"<</param<
        public JstWebServiceAgent(string url)
        {
            try
            {
                XmlTextReader reader = new XmlTextReader(url + "?wsdl");

                //建立 WSDL格式文档
                ServiceDescription sd = ServiceDescription.Read(reader);

                //客户端代理
                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, null, null);

                //使用CodeDom 动态编译代理类
                CodeNamespace   cn  = new CodeNamespace(CODE_NAMESPACE);
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                Microsoft.CSharp.CSharpCodeProvider icc = new Microsoft.CSharp.CSharpCodeProvider();
                CompilerParameters cp = new CompilerParameters();
                CompilerResults    cr = icc.CompileAssemblyFromDom(cp, ccu);
                agentType = cr.CompiledAssembly.GetTypes()[0];
                agent     = Activator.CreateInstance(agentType);
                WriteTextLog("日志", "初始化成功", DateTime.Now);
            }
            catch (Exception ex)
            {
                WriteTextLog("错误", ex.ToString(), DateTime.Now);
                throw;
            }
        }
예제 #3
0
        public void ImportHttpOnlyWsdl()
        {
            ServiceDescriptionImporter imp =
                new ServiceDescriptionImporter();

            imp.AddServiceDescription(ServiceDescription.Read("Test/System.Web.Services.Description/test3.wsdl"), null, null);
            CodeNamespace   cns = new CodeNamespace();
            CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cns);
            imp.Import(cns, ccu);
            // FIXME: this test could require more precise result
            bool verified = false;

            Assert.AreEqual(1, ccu.Namespaces.Count, "#1");
            Assert.AreEqual(1, ccu.Namespaces [0].Types.Count, "#2");
            foreach (CodeTypeDeclaration cd in ccu.Namespaces[0].Types)
            {
                Console.WriteLine("***" + cd.Name);
                if (cd.Name != "MyService")
                {
                    continue;
                }
                Assert.AreEqual("System.Web.Services.Protocols.HttpGetClientProtocol", cd.BaseTypes [0].BaseType);
                verified = true;
            }
            Assert.IsTrue(verified, "verified");
        }
예제 #4
0
        public static void Generate(string nameSpace, string serviceUri, string srcFile)
        {
            WebClient client = new WebClient();
            Stream    stream = client.OpenRead(serviceUri.EndsWith("?wsdl") ? serviceUri : (serviceUri + "?wsdl"));

            ServiceDescription desc = ServiceDescription.Read(stream);

            ServiceDescriptionImporter importor = new ServiceDescriptionImporter();

            importor.ProtocolName          = "Soap";
            importor.Style                 = ServiceDescriptionImportStyle.Client;
            importor.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
            importor.AddServiceDescription(desc, null, null);

            CodeNamespace   nsp  = string.IsNullOrEmpty(nameSpace) ? new CodeNamespace() : new CodeNamespace(nameSpace);
            CodeCompileUnit unit = new CodeCompileUnit();

            unit.Namespaces.Add(nsp);

            ServiceDescriptionImportWarnings warnings = importor.Import(nsp, unit);

            CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
            TextWriter      tWriter      = File.CreateText(srcFile);

            codeProvider.GenerateCodeFromCompileUnit(unit, tWriter, null);

            tWriter.Flush();
            tWriter.Close();
        }
        /// <summary>
        /// get an Assembly according to wsdl path.
        /// </summary>
        /// <param name="wsdl">wsdl path</param>
        /// <param name="nameSpace">namespace</param>
        /// <returns>return Assembly</returns>
        public static Assembly GetWebServiceAssembly(string wsdl, string nameSpace)
        {
            try
            {
                System.Net.WebClient webClient = new System.Net.WebClient();
                System.IO.Stream     webStream = webClient.OpenRead(wsdl);

                ServiceDescription         serviceDescription      = ServiceDescription.Read(webStream);
                ServiceDescriptionImporter serviceDescroptImporter = new ServiceDescriptionImporter();

                serviceDescroptImporter.AddServiceDescription(serviceDescription, "", "");
                System.CodeDom.CodeNamespace   codeNameSpace   = new System.CodeDom.CodeNamespace(nameSpace);
                System.CodeDom.CodeCompileUnit codeCompileUnit = new System.CodeDom.CodeCompileUnit();
                codeCompileUnit.Namespaces.Add(codeNameSpace);
                serviceDescroptImporter.Import(codeNameSpace, codeCompileUnit);

                System.CodeDom.Compiler.CodeDomProvider    codeDom        = new Microsoft.CSharp.CSharpCodeProvider();
                System.CodeDom.Compiler.CompilerParameters codeParameters = new System.CodeDom.Compiler.CompilerParameters();
                codeParameters.GenerateExecutable = false;
                codeParameters.GenerateInMemory   = true;

                codeParameters.ReferencedAssemblies.Add("System.dll");
                codeParameters.ReferencedAssemblies.Add("System.XML.dll");
                codeParameters.ReferencedAssemblies.Add("System.Web.Services.dll");
                codeParameters.ReferencedAssemblies.Add("System.Data.dll");

                System.CodeDom.Compiler.CompilerResults compilerResults = codeDom.CompileAssemblyFromDom(codeParameters, codeCompileUnit);

                return(compilerResults.CompiledAssembly);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #6
0
    private static Assembly CompileAssembly(ServiceDescriptionImporter descriptionImporter)
    {
        CodeNamespace   codeNamespace = new CodeNamespace();
        CodeCompileUnit codeUnit      = new CodeCompileUnit();

        codeUnit.Namespaces.Add(codeNamespace);

        ServiceDescriptionImportWarnings importWarnings = descriptionImporter.Import(codeNamespace, codeUnit);

        if (importWarnings == 0)
        {
            CodeDomProvider    compiler   = CodeDomProvider.CreateProvider("CSharp");
            string[]           references = { "System.Web.Services.dll", "System.Xml.dll" };
            CompilerParameters parameters = new CompilerParameters(references);
            CompilerResults    results    = compiler.CompileAssemblyFromDom(parameters, codeUnit);

            if (results.Errors.Count > 0)
            {
                throw new Exception("Compilation Error Creating Assembly");
            }

            return(results.CompiledAssembly);
        }
        else
        {
            throw new Exception("Invalid WSDL");
        }
    }
예제 #7
0
        /// <summary>
        /// 动态调用web服务
        /// </summary>
        /// <param name="url">WSDL服务地址</param>
        /// <param name="classname">服务接口类名</param>
        /// <param name="methodname">方法名</param>
        /// <param name="args">参数值</param>
        /// <returns></returns>
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            if ((classname == null) || (classname == ""))
            {
                classname = WebServiceHelper.GetWsClassName(url);
            }
            try
            {
                //获取WSDL
                WebClient          wc     = new WebClient();
                Stream             stream = wc.OpenRead(url + "?WSDL");
                ServiceDescription sd     = ServiceDescription.Read(stream);
                //注意classname一定要赋值获取
                classname = sd.Services[0].Name;

                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);

                //生成客户端代理类代码
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider icc = new CSharpCodeProvider();


                //设定编译参数
                CompilerParameters cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory   = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");
                //编译代理类
                CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
                //生成代理实例,并调用方法
                System.Reflection.Assembly assembly = cr.CompiledAssembly;
                Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
                object obj = Activator.CreateInstance(t);
                System.Reflection.MethodInfo mi = t.GetMethod(methodname);
                return(mi.Invoke(obj, args));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, new Exception(ex.StackTrace));
            }
        }
        /// <summary<
        /// 构造函数
        /// </summary<
        /// <param name="url"<</param<
        public WebServiceAgent(string url)
        {
            XmlTextReader reader = new XmlTextReader(url + "?wsdl");

            //创建和格式化 WSDL 文档
            ServiceDescription sd = ServiceDescription.Read(reader);

            //创建客户端代理代理类
            ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, null, null);

            //使用 CodeDom 编译客户端代理类
            CodeNamespace   cn  = new CodeNamespace(CODE_NAMESPACE);
            CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);
            Microsoft.CSharp.CSharpCodeProvider icc = new Microsoft.CSharp.CSharpCodeProvider();
            CompilerParameters cp = new CompilerParameters();
            CompilerResults    cr = icc.CompileAssemblyFromDom(cp, ccu);

            agentType = cr.CompiledAssembly.GetTypes()[0];
            agent     = Activator.CreateInstance(agentType);
        }
        private void ImportMetadata()
        {
            this._codeCompileUnit = new CodeCompileUnit();
            this._codeDomProvider = CodeDomProvider.CreateProvider(this._setupInfo.Language.ToString());

            CodeNamespace codeNamespace = new CodeNamespace();

            this._codeCompileUnit.Namespaces.Add(codeNamespace);

            ServiceDescriptionImporter serviceDescriptionImporter = new ServiceDescriptionImporter();

            serviceDescriptionImporter.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder | CodeGenerationOptions.EnableDataBinding;

            if (this._setupInfo.GenerateAsync)
            {
                serviceDescriptionImporter.CodeGenerationOptions |= CodeGenerationOptions.GenerateNewAsync | CodeGenerationOptions.GenerateOldAsync;
            }

            foreach (var serviceDescription in this.Metadata)
            {
                serviceDescriptionImporter.AddServiceDescription(serviceDescription, null, null);
            }

            this.ImportWarnings = serviceDescriptionImporter.Import(codeNamespace, this._codeCompileUnit);
        }
예제 #10
0
        private bool BuildWSDL(WebProperties WebProps, IntegrationLog Log)
        {
            try
            {
                Uri uri = new Uri(WebProps.Properties["WSDL"].ToString());
                //byte[] byteArray = Encoding.ASCII.GetBytes(WebProps.Properties["WSDL"].ToString());
                //MemoryStream stream = new MemoryStream(byteArray);
                WebRequest       webRequest = WebRequest.Create(uri);
                System.IO.Stream stream     = webRequest.GetResponse().GetResponseStream();

                ServiceDescription sd     = ServiceDescription.Read(stream);
                string             sdName = sd.Services[0].Name;

                // Initialize a service description servImport
                ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
                servImport.AddServiceDescription(sd, String.Empty, String.Empty);
                servImport.ProtocolName          = "Soap";
                servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

                CodeNamespace   nameSpace       = new CodeNamespace();
                CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
                codeCompileUnit.Namespaces.Add(nameSpace);

                ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit);

                if (warnings == 0)
                {
                    using (var stringWriter = new StringWriter(CultureInfo.CurrentCulture))
                    {
                        var prov = new CSharpCodeProvider();
                        prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions());

                        var assemblyReferences = new string[2] {
                            "System.Web.Services.dll", "System.Xml.dll"
                        };
                        var param = new CompilerParameters(assemblyReferences)
                        {
                            GenerateExecutable    = false,
                            GenerateInMemory      = true,
                            TreatWarningsAsErrors = false,
                            WarningLevel          = 4,
                        };

                        var results = new CompilerResults(new TempFileCollection());
                        results = prov.CompileAssemblyFromDom(param, codeCompileUnit);
                        var assembly = results.CompiledAssembly;
                        service = assembly.GetType(sdName);

                        methodInfo = service.GetMethods();
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                Log.LogMessage(ex.Message, IntegrationLogType.Error);
            }
            return(false);
        }
예제 #11
0
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            var @namespace = "iPem.Core.WebService";

            if (string.IsNullOrWhiteSpace(classname))
            {
                classname = GetWsClassName(url);
            }

            try {
                if (!url.EndsWith("wsdl", StringComparison.CurrentCultureIgnoreCase))
                {
                    url = string.Format("{0}?{1}", url, "wsdl");
                }

                //获取wsdl
                var wc     = new WebClient();
                var stream = wc.OpenRead(url);

                var sd  = ServiceDescription.Read(stream);
                var sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");

                var cn  = new CodeNamespace(@namespace);
                var ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);

                //设定编译参数
                var cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory   = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");

                //编译代理类
                var icc = new CSharpCodeProvider();
                var cr  = icc.CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    var sb = new System.Text.StringBuilder();
                    foreach (CompilerError ce in cr.Errors)
                    {
                        sb.AppendLine(ce.ToString());
                    }
                    throw new Exception(sb.ToString());
                }

                //生成代理实例,并调用方法
                var assembly = cr.CompiledAssembly;
                var t        = assembly.GetType(@namespace + "." + classname, true, true);
                var obj      = Activator.CreateInstance(t);
                var mi       = t.GetMethod(methodname);
                return(mi.Invoke(obj, args));
            } catch (Exception ex) {
                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
            }
        }
예제 #12
0
        void GenerateCode(HttpContext context, string langId)
        {
            context.Response.ContentType = "text/plain; charset=utf-8";
            CodeNamespace   codeNamespace = new CodeNamespace();
            CodeCompileUnit codeUnit      = new CodeCompileUnit();

            codeUnit.Namespaces.Add(codeNamespace);

            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

            foreach (ServiceDescription sd in GetDescriptions())
            {
                importer.AddServiceDescription(sd, null, null);
            }

            foreach (XmlSchema sc in GetSchemas())
            {
                importer.Schemas.Add(sc);
            }

            importer.Import(codeNamespace, codeUnit);

            if (langId == null || langId == "")
            {
                langId = "cs";
            }
            CodeDomProvider      provider  = GetProvider(langId);
            ICodeGenerator       generator = provider.CreateGenerator();
            CodeGeneratorOptions options   = new CodeGeneratorOptions();

            generator.GenerateCodeFromCompileUnit(codeUnit, context.Response.Output, options);
        }
예제 #13
0
        /// <summary>
        /// 实例化WebServices
        /// </summary>
        /// <param name="url">WebServices地址</param>
        /// <param name="methodname">调用的方法</param>
        /// <param name="args">把webservices里需要的参数按顺序放到这个object[]里</param>
        public static object InvokeWebService(string url, string methodname, object[] args)
        {
            //这里的namespace是需引用的webservices的命名空间,我没有改过,也可以使用。也可以加一个参数从外面传进来。
            //string @namespace = "client";
            string @namespace = assemblyName;

            try
            {
                //获取WSDL
                WebClient                  wc        = new WebClient();
                Stream                     stream    = wc.OpenRead(url + "?WSDL");
                ServiceDescription         sd        = ServiceDescription.Read(stream);
                string                     classname = sd.Services[0].Name;
                ServiceDescriptionImporter sdi       = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);

                //生成客户端代理类代码
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider csc = new CSharpCodeProvider();
                //ICodeCompiler icc = csc.CreateCompiler();

                //设定编译参数
                CompilerParameters cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory   = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");

                //编译代理类
                CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }

                //生成代理实例,并调用方法
                System.Reflection.Assembly assembly = cr.CompiledAssembly;
                Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
                object obj = Activator.CreateInstance(t);
                System.Reflection.MethodInfo mi = t.GetMethod(methodname);

                return(mi.Invoke(obj, args));
            }
            catch (Exception ex)
            {
                throw ex.InnerException;//throw ex.InnerException; 看到的是原始异常
                //return null;
            }
        }
예제 #14
0
        private static Assembly GenerateAssemblyFromWsdl(string wsdlUrl)
        {
            var importer = new ServiceDescriptionImporter();

            using (var webClient = new WebClient())
            {
                var wsdl = webClient.DownloadString(wsdlUrl);
                var serviceDescription = ServiceDescription.Read(new StringReader(wsdl));
                importer.AddServiceDescription(serviceDescription, null, null);
            }
            importer.Style = ServiceDescriptionImportStyle.Client;

            importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;

            var @namespace      = new CodeNamespace();
            var compilationUnit = new CodeCompileUnit();

            compilationUnit.Namespaces.Add(@namespace);
            importer.Import(@namespace, compilationUnit);
            var cSharpProvider = CodeDomProvider.CreateProvider("C#");

            var parms = new CompilerParameters(new[]
                                               { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" })
            {
                GenerateInMemory = true
            };
            var results  = cSharpProvider.CompileAssemblyFromDom(parms, compilationUnit);
            var assembly = results.CompiledAssembly;

            if (results.Errors.Count > 0)
            {
            }
            return(assembly);
        }
예제 #15
0
        /// <summary>
        /// Gerar a estrutura e o grafo da classe
        /// </summary>
        private CodeNamespace GerarGrafo()
        {
            #region Gerar a estrutura da classe do serviço
            //Gerar a estrutura da classe do serviço
            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
            importer.AddServiceDescription(this.serviceDescription, string.Empty, string.Empty);

            //Definir o nome do protocolo a ser utilizado
            //Não posso definir, tenho que deixar por conta do WSDL definir, ou pode dar erro em alguns estados
            //importer.ProtocolName = "Soap12";
            //importer.ProtocolName = "Soap";

            //Tipos deste serviço devem ser gerados como propriedades e não como simples campos
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
            #endregion

            #region Gerar o o grafo da classe para depois gerar o código
            CodeNamespace   @namespace = new CodeNamespace();
            CodeCompileUnit unit       = new CodeCompileUnit();
            unit.Namespaces.Add(@namespace);
            ServiceDescriptionImportWarnings warmings = importer.Import(@namespace, unit);
            #endregion

            return(@namespace);
        }
        /// <summary>
        /// 使用CodeDom编译客户端代理类
        /// </summary>
        /// <param name="connection">WebService数据源提供程序的连接类的实例</param>
        protected CommandBase(Connection connection)
        {
            Connection = connection;

            //如果还没有获取服务说明则先获取服务说明
            if (connection.ServiceDescription == null)
            {
                connection.LoadServiceDescription();
            }

            //创建客户端代理类
            var serviceDescriptionImporter = new ServiceDescriptionImporter
            {
                ProtocolName          = "Soap",                                  // 指定访问协议。
                Style                 = ServiceDescriptionImportStyle.Client,    // 生成客户端代理
                CodeGenerationOptions = CodeGenerationOptions.GenerateProperties //| CodeGenerationOptions.GenerateNewAsync
            };

            serviceDescriptionImporter.AddServiceDescription(connection.ServiceDescription, null, null); // 添加 WSDL 文档

            //使用CodeDom编译客户端代理类
            var codeNamespace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间

            CodeCompileUnit = new CodeCompileUnit();
            CodeCompileUnit.Namespaces.Add(codeNamespace);
            serviceDescriptionImporter.Import(codeNamespace, CodeCompileUnit);
        }
예제 #17
0
        ///	<summary>
        ///	得到WSDL信息,生成本地代理类并编译为DLL
        ///	</summary>
        private void CreateServiceAssembly()
        {
            if (this.checkCache())
            {
                this.initTypeName();
                return;
            }
            if (string.IsNullOrEmpty(this._wsdlUrl))
            {
                return;
            }
            try
            {
                //使用WebClient下载WSDL信息
                WebClient          web         = new WebClient();
                Stream             stream      = web.OpenRead(this._wsdlUrl);
                ServiceDescription description = ServiceDescription.Read(stream);//创建和格式化WSDL文档
                stream.Close();
                web.Dispose();

                ServiceDescriptionImporter importer = new ServiceDescriptionImporter(); //创建客户端代理代理类
                importer.ProtocolName          = "Soap";
                importer.Style                 = ServiceDescriptionImportStyle.Client;  //生成客户端代理
                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
                importer.AddServiceDescription(description, null, null);                //添加WSDL文档
                //使用CodeDom编译客户端代理类
                CodeNamespace   nmspace = new CodeNamespace(_assName);                  //为代理类添加命名空间
                CodeCompileUnit unit    = new CodeCompileUnit();
                unit.Namespaces.Add(nmspace);
                this.checkForImports(this._wsdlUrl, importer);
                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
                CodeDomProvider    provider  = CodeDomProvider.CreateProvider("CSharp");
                CompilerParameters parameter = new CompilerParameters();
                parameter.ReferencedAssemblies.Add("System.dll");
                parameter.ReferencedAssemblies.Add("System.XML.dll");
                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
                parameter.ReferencedAssemblies.Add("System.Data.dll");
                parameter.GenerateExecutable      = false;
                parameter.GenerateInMemory        = false;
                parameter.IncludeDebugInformation = false;
                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
                provider.Dispose();
                if (result.Errors.HasErrors)
                {
                    string errors = string.Format(@"编译错误:{0}错误!", result.Errors.Count);
                    foreach (CompilerError error in result.Errors)
                    {
                        errors += error.ErrorText;
                    }
                    throw new Exception(errors);
                }
                this.copyTempAssembly(result.PathToAssembly);
                this.initTypeName();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
예제 #18
0
        /// <summary>
        /// 创建一个调用webservice的本地代理DLL
        /// </summary>
        /// <param name="url"></param>
        public static void CreateWebServiceDLL()
        {
            string smsfile = HttpContext.Current.Server.MapPath("~") + "dll" + "\\SMSWebservice.dll";

            if (!File.Exists(smsfile))
            {
                return;
            }
            try
            {
                string url = smsWSDL;
                url = url.ToUpper().Contains("?WSDL") ? url : (url + "?WSDL");
                // 1. 使用 WebClient 下载 WSDL 信息。
                WebClient web    = new WebClient();
                Stream    stream = web.OpenRead(url);
                // 2. 创建和格式化 WSDL 文档。
                ServiceDescription description = ServiceDescription.Read(stream);
                // 3. 创建客户端代理代理类。
                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
                importer.ProtocolName          = "Soap";                               // 指定访问协议。
                importer.Style                 = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
                importer.AddServiceDescription(description, null, null);               // 添加 WSDL 文档。
                // 4. 使用 CodeDom 编译客户端代理类。
                CodeNamespace   nmspace = new CodeNamespace();                         // 为代理类添加命名空间,缺省为全局空间。
                CodeCompileUnit unit    = new CodeCompileUnit();
                unit.Namespaces.Add(nmspace);
                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
                CodeDomProvider    provider  = CodeDomProvider.CreateProvider("CSharp");
                CompilerParameters parameter = new CompilerParameters();
                parameter.GenerateExecutable = false;
                string file = HttpContext.Current.Server.MapPath("~") + "dll";
                if (!Directory.Exists(file))
                {
                    Directory.CreateDirectory(file);
                }
                parameter.OutputAssembly = file + "\\SMSWebservice.dll";  // 可以指定你所需的任何文件名。
                parameter.ReferencedAssemblies.Add("System.dll");
                parameter.ReferencedAssemblies.Add("System.XML.dll");
                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
                parameter.ReferencedAssemblies.Add("System.Data.dll");
                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
                if (result.Errors.HasErrors)
                {
                    // 显示编译错误信息
                    System.Text.StringBuilder sb = new StringBuilder();
                    foreach (CompilerError ce in result.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #19
0
        public static Type GetWsProxyType(string wsUrl, string classname)
        {
            string name = "CJBasic.WebService.DynamicWebCalling";

            if ((classname == null) || (classname == ""))
            {
                classname = GetWsClassName(wsUrl);
            }
            string key = wsUrl + "@" + classname;

            if (WSProxyTypeDictionary.ContainsKey(key))
            {
                return(WSProxyTypeDictionary[key]);
            }
            WebClient                  client             = new WebClient();
            ServiceDescription         serviceDescription = ServiceDescription.Read(client.OpenRead(wsUrl + "?WSDL"));
            ServiceDescriptionImporter importer           = new ServiceDescriptionImporter();

            importer.AddServiceDescription(serviceDescription, "", "");
            CodeNamespace   namespace2      = new CodeNamespace(name);
            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();

            codeCompileUnit.Namespaces.Add(namespace2);
            importer.Import(namespace2, codeCompileUnit);
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters options  = new CompilerParameters();

            options.GenerateExecutable = false;
            options.GenerateInMemory   = true;
            options.ReferencedAssemblies.Add("System.dll");
            options.ReferencedAssemblies.Add("System.XML.dll");
            options.ReferencedAssemblies.Add("System.Web.Services.dll");
            options.ReferencedAssemblies.Add("System.Data.dll");
            CompilerResults results = provider.CompileAssemblyFromDom(options, new CodeCompileUnit[] { codeCompileUnit });

            if (results.Errors.HasErrors)
            {
                StringBuilder builder = new StringBuilder();
                foreach (CompilerError error in results.Errors)
                {
                    builder.Append(error.ToString());
                    builder.Append(Environment.NewLine);
                }
                throw new Exception(builder.ToString());
            }
            Assembly compiledAssembly = results.CompiledAssembly;

            Type[] types = compiledAssembly.GetTypes();
            Type   type  = compiledAssembly.GetType(name + "." + classname, true, true);

            lock (WSProxyTypeDictionary)
            {
                if (!WSProxyTypeDictionary.ContainsKey(key))
                {
                    WSProxyTypeDictionary.Add(key, type);
                }
            }
            return(type);
        }
예제 #20
0
        /// <summary>
        /// 获取webService远程对象
        /// </summary>
        /// <param name="url"></param>
        /// <param name="classname"></param>
        /// <returns></returns>
        public static object GetWebServiceClassObject(string url, string classname)
        {
            string @namespace = "ServiceBase.WebService.DynamicWebLoad";

            if (string.IsNullOrWhiteSpace(classname))
            {
                classname = GetClassName(url);
            }

            if (!url.EndsWith("?WSDL", StringComparison.OrdinalIgnoreCase))
            {
                url = url + "?WSDL";
            }
            ///动态调用类所执行的过程
            //1.获取服务描述语言(WSDL)
            WebClient                  wc     = new WebClient();
            Stream                     stream = wc.OpenRead(url);
            ServiceDescription         sd     = ServiceDescription.Read(stream);  //设置Web服务描述语言
            ServiceDescriptionImporter sdi    = new ServiceDescriptionImporter(); //生成客户端代理类

            sdi.AddServiceDescription(sd, "", "");
            CodeNamespace cn = new CodeNamespace(@namespace);  //声明命名空间
            //2.生成客户端代理类代码
            CodeCompileUnit ccu = new CodeCompileUnit();       //为CodeDOM程序图形提供容器

            ccu.Namespaces.Add(cn);                            //获取命名空间集合
            sdi.Import(cn, ccu);
            CSharpCodeProvider csc = new CSharpCodeProvider(); //提供对 C# 代码生成器和代码编译器的实例的访问
            //ICodeCompiler icc = csc.CreateCompiler();//定义用于调用源代码编译的接口或使用指定编译器的 CodeDOM 树
            //3.设定编译器的参数
            CompilerParameters cplist = new CompilerParameters();

            cplist.GenerateExecutable = false; //设置是否为可执行文件
            cplist.GenerateInMemory   = true;  //设置是否在内存中生成输出
            cplist.ReferencedAssemblies.Add("System.dll");
            cplist.ReferencedAssemblies.Add("System.XML.dll");
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
            cplist.ReferencedAssemblies.Add("System.Data.dll");
            //4.编译代理类
            CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);// icc.CompileAssemblyFromDom(cplist, ccu);//使用指定的编译器设置编译程序集

            if (true == cr.Errors.HasErrors)
            {
                System.Text.StringBuilder sb = new StringBuilder();
                foreach (CompilerError ce in cr.Errors)
                {
                    sb.Append(ce.ToString());
                    sb.Append(System.Environment.NewLine);
                }
                throw new Exception(sb.ToString());
            }

            //5.生成代理实例,并调用方法
            System.Reflection.Assembly assembly = cr.CompiledAssembly; //获取或设置已编译的程序集
            Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
            object obj = Activator.CreateInstance(t);                  //为 COM 对象提供对方法的版本无关的访问

            return(obj);
        }
예제 #21
0
        /// <summary>
        /// 动态调用WebService
        /// </summary>
        /// <param name="url">WebService地址</param>
        /// <param name="classname">类名</param>
        /// <param name="methodname">方法名(模块名)</param>
        /// <param name="args">参数列表</param>
        /// <returns>object</returns>
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            string @namespace = "WebService.webservice";

            if (classname == null || classname == "")
            {
                classname = WebServiceHelper.GetClassName(url);
            }


            WebClient                  wc     = new WebClient();
            Stream                     stream = wc.OpenRead(url + "?WSDL");      //获取服务描述语言(WSDL)
            ServiceDescription         sd     = ServiceDescription.Read(stream); //通过直接从 Stream实例加载 XML 来初始化ServiceDescription类的实例。
            ServiceDescriptionImporter sdi    = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, "", "");
            CodeNamespace cn = new CodeNamespace(@namespace);  //CodeNamespace表示命名空间声明。
            //生成客户端代理类代码
            CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);

            //CSharpCodeProvider csc = new CSharpCodeProvider();
            //ICodeCompiler icc = csc.CreateCompiler();//取得C#程式码编译器的执行个体
            CSharpCodeProvider icc = new CSharpCodeProvider();

            //设定编译器的参数
            CompilerParameters cplist = new CompilerParameters();//创建编译器的参数实例

            cplist.GenerateExecutable = false;
            cplist.GenerateInMemory   = true;
            cplist.ReferencedAssemblies.Add("System.dll");
            cplist.ReferencedAssemblies.Add("System.XML.dll");
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
            cplist.ReferencedAssemblies.Add("System.Data.dll");
            //编译代理类
            CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);

            if (true == cr.Errors.HasErrors)
            {
                System.Text.StringBuilder sb = new StringBuilder();
                foreach (CompilerError ce in cr.Errors)
                {
                    sb.Append(ce.ToString());
                    sb.Append(System.Environment.NewLine);
                }
                throw new Exception(sb.ToString());
            }

            //生成代理实例,并调用方法
            System.Reflection.Assembly assembly = cr.CompiledAssembly;
            Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
            object obj = Activator.CreateInstance(t);

            System.Reflection.MethodInfo mi = t.GetMethod(methodname);//MethodInfo 的实例可以通过调用GetMethods或者Type对象或派生自Type的对象的GetMethod方法来获取,还可以通过调用表示泛型方法定义的 MethodInfo 的MakeGenericMethod方法来获取。

            return(mi.Invoke(obj, args));
        }
예제 #22
0
        /// <summary>
        /// 动态调用WebService
        /// </summary>
        /// <param name="url">WebService地址</param>
        /// <param name="classname">类名</param>
        /// <param name="methodname">方法名(模块名)</param>
        /// <param name="args">参数列表</param>
        /// <returns>object</returns>
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            string @namespace = "fangqm.Netbank.WebService.webservice";

            if (classname == null || classname == "")
            {
                classname = WebServiceHelper.GetClassName(url);
            }

            //获取服务描述语言(WSDL)
            WebClient                  wc     = new WebClient();
            Stream                     stream = wc.OpenRead(url + "?WSDL");       //【1】
            ServiceDescription         sd     = ServiceDescription.Read(stream);  //【2】
            ServiceDescriptionImporter sdi    = new ServiceDescriptionImporter(); //【3】

            sdi.AddServiceDescription(sd, "", "");
            CodeNamespace cn = new CodeNamespace(@namespace);//【4】

            //生成客户端代理类代码
            CodeCompileUnit ccu = new CodeCompileUnit();//【5】

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);
            CSharpCodeProvider csc = new CSharpCodeProvider();                 //【6】
            CodeDomProvider    icc = CodeDomProvider.CreateProvider("CSharp"); //【7】

            //设定编译器的参数
            CompilerParameters cplist = new CompilerParameters();//【8】

            cplist.GenerateExecutable = false;
            cplist.GenerateInMemory   = true;
            cplist.ReferencedAssemblies.Add("System.dll");
            cplist.ReferencedAssemblies.Add("System.XML.dll");
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
            cplist.ReferencedAssemblies.Add("System.Data.dll");

            //编译代理类
            CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);//【9】

            if (true == cr.Errors.HasErrors)
            {
                System.Text.StringBuilder sb = new StringBuilder();
                foreach (CompilerError ce in cr.Errors)
                {
                    sb.Append(ce.ToString());
                    sb.Append(System.Environment.NewLine);
                }
                throw new Exception(sb.ToString());
            }

            //生成代理实例,并调用方法
            System.Reflection.Assembly assembly = cr.CompiledAssembly;
            Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
            object obj = Activator.CreateInstance(t);                  //【10】

            System.Reflection.MethodInfo mi = t.GetMethod(methodname); //【11】
            return(mi.Invoke(obj, args));
        }
예제 #23
0
        /// < summary>
        /// 动态调用web服务
        /// < /summary>
        /// < param name="url">WSDL服务地址< /param>
        /// < param name="classname">类名< /param>
        /// < param name="methodname">方法名< /param>
        /// < param name="args">参数< /param>
        /// < returns>< /returns>
        public object InvokeWebService(string url, string classname, string methodname, object arg)
        {
            string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            try
            {
                //获取WSDL
                WebClient wc = new WebClient();
                if (!url.ToUpper().Contains("WSDL"))
                {
                    url = string.Format("{0}?{1}", url, "WSDL");
                }
                Stream                     stream = wc.OpenRead(url);
                ServiceDescription         sd     = ServiceDescription.Read(stream);
                ServiceDescriptionImporter sdi    = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);
                //生成客户端代理类代码
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider icc = new CSharpCodeProvider();
                //设定编译参数
                CompilerParameters cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory   = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");
                //编译代理类
                CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
                //生成代理实例,并调用方法
                System.Reflection.Assembly assembly = cr.CompiledAssembly;
                Type   t   = assembly.GetType(@namespace + "." + classname, true, true);
                object obj = Activator.CreateInstance(t);
                System.Reflection.MethodInfo mi = t.GetMethod(methodname);
                //设置WebService超时时间
                ((System.Web.Services.Protocols.WebClientProtocol)(obj)).Timeout = this.outTime;
                var jsonStr   = JsonConvert.SerializeObject(arg);
                var miParType = mi.GetParameters()[0].ParameterType;
                return(mi.Invoke(obj, new object[] { JsonConvert.DeserializeObject(jsonStr, miParType) }));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #24
0
        /// <summary>
        /// 动态调用WebService(基于反射)
        /// </summary>
        /// <param name="url">WebService地址</param>
        /// <param name="classname">类名</param>
        /// <param name="methodname">方法名</param>
        /// <param name="args">参数列表</param>
        /// <returns>调用接口的返回值</returns>
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            string @namespace = "ServiceBase.WebService.DynamicWebLoad";

            if (string.IsNullOrWhiteSpace(classname))
            {
                classname = GetClassName(url);
            }
            //获取服务描述语言(WSDL)
            WebClient          wc = new WebClient();
            ServiceDescription sd;

            using (Stream stream = wc.OpenRead(url + "?WSDL"))
            {
                sd = ServiceDescription.Read(stream);
            }
            ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, "", "");
            CodeNamespace cn = new CodeNamespace(@namespace);
            //生成客户端代码类代码
            CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);
            CodeDomProvider csc = new CSharpCodeProvider();
            //ICodeCompiler icc = csc.CreateCompiler();
            //设定编译器的参数
            CompilerParameters cplist = new CompilerParameters
            {
                GenerateExecutable = false,
                GenerateInMemory   = true
            };

            cplist.ReferencedAssemblies.Add("System.dll");
            cplist.ReferencedAssemblies.Add("System.XML.dll");
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
            cplist.ReferencedAssemblies.Add("System.Data.dll");
            //编译代理类
            CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);//icc.CompileAssemblyFromDom(cplist, ccu);

            if (cr.Errors.HasErrors)
            {
                StringBuilder sb = new StringBuilder();
                foreach (CompilerError ce in cr.Errors)
                {
                    sb.Append(ce.ToString() + Environment.NewLine);
                }
                throw new Exception(sb.ToString());
            }
            // 生成代理实例并调用方法
            Assembly   assembly = cr.CompiledAssembly;
            Type       t        = assembly.GetType(@namespace + "." + classname, true, true);
            object     obj      = Activator.CreateInstance(t);
            MethodInfo mi       = t.GetMethod(methodname);

            return(mi?.Invoke(obj, args));
        }
        private Assembly CompileAssembly(ServiceDescriptionImporter serviceImporter, bool inMemory = true)
        {
            if (serviceImporter == null)
            {
                return(null);
            }

            // Initialize a Code-DOM tree into which we will import the service.
            var compileUnit = new CodeCompileUnit();
            var nameSpace   = new CodeNamespace();

            compileUnit.Namespaces.Add(nameSpace);

            // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
            var warnings = serviceImporter.Import(nameSpace, compileUnit);

            if (warnings == 0)
            {
                // create a c# compiler
                var codeProvider = CodeDomProvider.CreateProvider("CSharp");

                // include the assembly references needed to compile
                var parameters = new CompilerParameters();
                parameters.ReferencedAssemblies.Add("System.dll");
                parameters.ReferencedAssemblies.Add("System.Web.Services.dll");
                parameters.ReferencedAssemblies.Add("System.Web.dll");
                parameters.ReferencedAssemblies.Add("System.Xml.dll");
                parameters.ReferencedAssemblies.Add("System.Data.dll");
                // parameters.OutputAssembly = "";
                parameters.GenerateExecutable    = !inMemory;
                parameters.GenerateInMemory      = inMemory;
                parameters.TreatWarningsAsErrors = false;
                parameters.WarningLevel          = 4;

                // compile into assembly
                var results = codeProvider.CompileAssemblyFromDom(parameters, compileUnit);

                // Check For Errors
                if (results.Errors.Count > 0)
                {
                    var errorText = "";
                    var i         = 1;
                    foreach (CompilerError error in results.Errors)
                    {
                        errorText += "Error (" + i + "): " + error.ErrorText + Environment.NewLine;
                        i++;
                    }

                    throw new Exception(string.Format("Error on compiling proxy assembly for service '{0}'", this.ServiceUrl) + Environment.NewLine + errorText);
                }

                return(results.CompiledAssembly);
            }
            else
            {
                return(null);
            }
        }
예제 #26
0
        ///// <summary>
        ///// 获取地址
        ///// </summary>
        ///// <param name="lab"></param>
        ///// <returns></returns>
        //public static string getURL(string lab)
        //{
        //    string URL = string.Empty;

        //    bool IsExist = ConfigurationSettings.AppSettings.AllKeys.Contains(lab);
        //    if (IsExist)
        //    {
        //        URL = ConfigurationSettings.AppSettings[lab];
        //    }
        //    return URL;
        //}

        ///// <summary>
        ///// 执行各地webservice方法
        ///// </summary>
        ///// <param name="lab"></param>
        ///// <returns></returns>
        //public static string Execute(string lab, string methodname, object[] obj)
        //{
        //    if (lab == string.Empty) { return ErrorCode.Login_1001; }

        //    string url = getURL(lab);

        //    if (url == string.Empty)
        //    {
        //        return string.Format(ErrorCode.Login_1002 + " 分点代码[ {0} ]!", lab);
        //    }
        //    return InvokeWebservice(url, "LISWebService", "LISService", methodname, obj).ToString();
        //}


        /// <summary>
        /// 根据指定的信息,调用远程WebService方法
        /// </summary>
        /// <param name="url">WebService的http形式的地址</param>
        /// <param name="namespace">欲调用的WebService的命名空间</param>
        /// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param>
        /// <param name="methodname">欲调用的WebService的方法名</param>
        /// <param name="args">参数列表</param>
        /// <returns>WebService的执行结果</returns>
        /// <remarks>
        /// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。
        /// 异常信息可能会发生在两个地方:
        /// 1、动态构造WebService的时候,CompileAssembly失败。
        /// 2、WebService本身执行失败。
        /// </remarks>
        /// <example>
        /// <code>
        /// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});
        /// </code>
        /// </example>
        public static object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args)
        {
            WebClient wc     = null;
            Stream    stream = null;

            try
            {
                wc     = new WebClient();
                stream = wc.OpenRead(url + "?WSDL");
                ServiceDescription         sd  = ServiceDescription.Read(stream);
                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace   cn  = new CodeNamespace(@namespace);
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);

                CSharpCodeProvider csc = new CSharpCodeProvider();
                //CodeDomProvider icc = csc.crete;

                CompilerParameters cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory   = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");


                CompilerResults cr = CodeDomProvider.CreateProvider("C#").CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
                Assembly   assembly = cr.CompiledAssembly;
                Type       t        = assembly.GetType(@namespace + "." + classname, true, true);
                object     obj      = Activator.CreateInstance(t);
                MethodInfo mi       = t.GetMethod(methodname);
                csc.Dispose();
                return(mi.Invoke(obj, args));
            }
            catch (Exception ex)
            {
                return(string.Format(" {0} \r\n 请求地址:[ {1} ] \r\n  {2}", ex.Message, url, ex.InnerException == null ? "" : ex.InnerException.Message));
            }
            finally
            {
                stream.Close();
                wc.Dispose();
                GC.Collect();
            }
        }
예제 #27
0
        public bool SetWebServiceInstance(string webServiceAsmxUrl, string serviceName)
        {
            bool   success  = false;
            string lastStep = "";

            try
            {
                LastError = "";
                lastStep  = "Getting web service description/specification";
                WebClient                  client      = new WebClient();
                Stream                     stream      = client.OpenRead(webServiceAsmxUrl + "?wsdl");
                ServiceDescription         description = ServiceDescription.Read(stream);
                ServiceDescriptionImporter importer    = new ServiceDescriptionImporter();
                //ServiceContractGenerator
                importer.ProtocolName = "Soap12";
                importer.AddServiceDescription(description, null, null);
                importer.Style = ServiceDescriptionImportStyle.Client;
                importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
                CodeNamespace   nmspace = new CodeNamespace();
                CodeCompileUnit unit1   = new CodeCompileUnit();
                unit1.Namespaces.Add(nmspace);
                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);

                if (warning == 0)
                {
                    CodeDomProvider provider1          = CodeDomProvider.CreateProvider("CSharp");
                    string[]        assemblyReferences = new string[] { "System.dll",
                                                                        "System.Web.Services.dll", "System.Web.dll",
                                                                        "System.Xml.dll", "System.Data.dll" };
                    CompilerParameters parms = new CompilerParameters(assemblyReferences);
                    parms.GenerateInMemory = true;
                    CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

                    if (results.Errors.Count > 0)
                    {
                        foreach (CompilerError oops in results.Errors)
                        {
                            System.Diagnostics.Debug.WriteLine("========Compiler error============");
                            System.Diagnostics.Debug.WriteLine(oops.ErrorText);
                        }
                        throw new System.Exception("Compile Error Occurred calling webservice.");
                    }

                    lastStep           = "Creating instance of web service client";
                    WebServiceInstance = results.CompiledAssembly.CreateInstance(serviceName);
                    success            = true;
                }
                else
                {
                    LastError = string.Format("ServiceDescriptionImporter returned {0}", warning);
                }
            }
            catch (Exception ex)
            {
                LastError = string.Format("Last step: {0}\r\n{1}", lastStep, ex.ToString());
            }
            return(success);
        }
    public static void DisplayWarning(string myWSDLFileName)
    {
// <Snippet1>
        String myDisplay;
        // Read wsdl file.
        ServiceDescription myServiceDescription = ServiceDescription.Read
                                                      (myWSDLFileName);

        ServiceDescriptionImporter myServiceDescriptionImporter = new
                                                                  ServiceDescriptionImporter();

        // Add 'myServiceDescription' to 'myServiceDescriptionImporter'.
        myServiceDescriptionImporter.AddServiceDescription
            (myServiceDescription, "", "");

        myServiceDescriptionImporter.ProtocolName = "HttpGet";
        CodeNamespace   myCodeNamespace   = new CodeNamespace();
        CodeCompileUnit myCodeCompileUnit = new CodeCompileUnit();

        // Invoke 'Import' method.
        ServiceDescriptionImportWarnings myWarning =
            myServiceDescriptionImporter.Import(myCodeNamespace,
                                                myCodeCompileUnit);

        switch (myWarning)
        {
        case ServiceDescriptionImportWarnings.NoCodeGenerated:
            myDisplay = "NoCodeGenerated";
            break;

        case ServiceDescriptionImportWarnings.NoMethodsGenerated:
            myDisplay = "NoMethodsGenerated";
            break;

        case ServiceDescriptionImportWarnings.UnsupportedOperationsIgnored:
            myDisplay = "UnsupportedOperationsIgnored";
            break;

        case ServiceDescriptionImportWarnings.OptionalExtensionsIgnored:
            myDisplay = "OptionalExtensionsIgnored";
            break;

        case ServiceDescriptionImportWarnings.RequiredExtensionsIgnored:
            myDisplay = "RequiredExtensionsIgnored";
            break;

        case ServiceDescriptionImportWarnings.UnsupportedBindingsIgnored:
            myDisplay = "UnsupportedBindingsIgnored";
            break;

        default:
            myDisplay = "General Warning";
            break;
        }
        Console.WriteLine("Warning : " + myDisplay);
// </Snippet1>
    }
예제 #29
0
파일: CoreClient.cs 프로젝트: clks2001/Wdxx
 /// <summary>
 /// 带服务地址构造函数
 /// </summary>
 /// <param name="serviceUrl">服务地址</param>
 public CoreClient(string serviceUrl)
 {
     ServiceUrl = serviceUrl.TrimEnd('/');
     try
     {
         //获取WSDL
         var wc     = new WebClient();
         var stream = wc.OpenRead(ServiceUrl + "?WSDL");
         wc.Dispose();
         if (stream == null)
         {
             _type = null;
             return;
         }
         var sd        = ServiceDescription.Read(stream);
         var classname = sd.Services[0].Name;
         var sdi       = new ServiceDescriptionImporter();
         sdi.AddServiceDescription(sd, "", "");
         var cn = new CodeNamespace();
         //生成客户端代理类代码
         var ccu = new CodeCompileUnit();
         ccu.Namespaces.Add(cn);
         sdi.Import(cn, ccu);
         var csc = new CSharpCodeProvider();
         //设定编译参数
         var cplist = new CompilerParameters
         {
             GenerateExecutable = false,
             GenerateInMemory   = true
         };
         //动态编译后的程序集不生成可执行文件
         //动态编译后的程序集只存在于内存中,不在硬盘的文件上
         cplist.ReferencedAssemblies.Add("System.dll");
         cplist.ReferencedAssemblies.Add("System.XML.dll");
         cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
         cplist.ReferencedAssemblies.Add("System.Data.dll");
         //编译代理类
         var cr = csc.CompileAssemblyFromDom(cplist, ccu);
         if (cr.Errors.HasErrors)
         {
             var sb = new StringBuilder();
             foreach (CompilerError ce in cr.Errors)
             {
                 sb.Append(ce);
                 sb.Append(Environment.NewLine);
             }
             throw new Exception(sb.ToString());
         }
         //生成代理实例,并调用方法
         var assembly = cr.CompiledAssembly;
         _type = assembly.GetType(classname, true, true);
     }
     catch (Exception e)
     {
         CoreLog.Error(e);
     }
 }
예제 #30
0
        /// <summary>
        /// 动态调用web服务
        /// </summary>
        /// <param name="url">WSDL服务地址</param>
        /// <param name="classname">类名</param>
        /// <param name="methodname">方法名</param>
        /// <param name="args">参数</param>
        /// <returns></returns>
        public static object InvokeWebService(string url, string classname, string methodname, object[] args)
        {
            const string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            if (string.IsNullOrEmpty(classname))
            {
                classname = GetWsClassName(url);
            }
            try
            {                   //获取WSDL
                var wc     = new WebClient();
                var stream = wc.OpenRead(url + "?WSDL");
                if (stream != null)
                {
                    var sd  = ServiceDescription.Read(stream);
                    var sdi = new ServiceDescriptionImporter();
                    sdi.AddServiceDescription(sd, "", "");
                    var cn = new CodeNamespace(@namespace);
                    //生成客户端代理类代码
                    var ccu = new CodeCompileUnit();
                    ccu.Namespaces.Add(cn);
                    sdi.Import(cn, ccu);
                    var icc = new CSharpCodeProvider();
                    //设定编译参数
                    var cplist = new CompilerParameters {
                        GenerateExecutable = false, GenerateInMemory = true
                    };
                    cplist.ReferencedAssemblies.Add("System.dll");
                    cplist.ReferencedAssemblies.Add("System.XML.dll");
                    cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                    cplist.ReferencedAssemblies.Add("System.Data.dll");
                    //编译代理类
                    var cr = icc.CompileAssemblyFromDom(cplist, ccu);
                    if (cr.Errors.HasErrors)
                    {
                        var sb = new StringBuilder();
                        foreach (CompilerError ce in cr.Errors)
                        {
                            sb.Append(ce);
                            sb.Append(Environment.NewLine);
                        }
                        throw new Exception(sb.ToString());
                    }
                    //生成代理实例,并调用方法
                    var assembly = cr.CompiledAssembly;
                    var t        = assembly.GetType(@namespace + "." + classname, true, true);
                    var obj      = Activator.CreateInstance(t);
                    var mi       = t.GetMethod(methodname);
                    return(mi.Invoke(obj, args));
                }
                return("");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
            }
        }
예제 #31
0
        /// <summary>
        /// 调用WebService
        /// </summary>
        /// <param name="wsUrl">WebService地址</param>
        /// <param name="className">类名</param>
        /// <param name="methodName">方法名称</param>
        /// <param name="hashtable">参数列表</param>
        /// <returns></returns>
        public static object InvokeWebService(string wsUrl, string className, string methodName, Hashtable hashtable)
        {
            object[]     args       = Hashtable2Object(hashtable);
            const string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            if (string.IsNullOrEmpty(className))
            {
                className = GetClassName(wsUrl);
            }
            try
            {
                //获取WSDL
                WebClient                  wc     = new WebClient();
                Stream                     stream = wc.OpenRead(wsUrl + "?wsdl");
                ServiceDescription         sd     = ServiceDescription.Read(stream);
                ServiceDescriptionImporter sdi    = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);
                //生成客户端代理类代码
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider csc = new CSharpCodeProvider();
                // ReSharper disable once CSharpWarnings::CS0618
                ICodeCompiler icc = csc.CreateCompiler();
                //设定编译参数
                CompilerParameters cplist = new CompilerParameters {
                    GenerateExecutable = false, GenerateInMemory = true
                };
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");
                //编译代理类
                CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
                if (cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce);
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
                //生成代理实例,并调用方法
                System.Reflection.Assembly assembly = cr.CompiledAssembly;
                Type   t   = assembly.GetType(@namespace + "." + className, true, true);
                object obj = Activator.CreateInstance(t);
                System.Reflection.MethodInfo mi = t.GetMethod(methodName);
                return(mi.Invoke(obj, args));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
            }
        }
    private int CreateServices(string wsdl_text)
    {
        Type service;
        try
        {
            //Try Database Connection
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SAASDB"].ToString());
            try
            {
                conn.Open();
            }
            catch (Exception e)
            {
                //Return Error
                return -1;
            }

            localhost.Service serviceObj = new localhost.Service();

            //Insert into Data Table the services
            int count = 0;
            List<string> fieldnames = new List<string>();
            List<localhost.Field> fieldlist = new List<localhost.Field>();
            localhost.Field[] fields = serviceObj.ReadField(11, 30);
            fieldlist = new List<localhost.Field>(fields);
            foreach (localhost.Field item in fieldlist)
            {
                fieldnames.Add(count.ToString());
                count++;
            }

            Uri uri = new Uri(wsdl_text);
            WebRequest webRequest = WebRequest.Create(uri);
            System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();

            // Get a WSDL file describing a service
            ServiceDescription sd = ServiceDescription.Read(requestStream);
            string sdName = sd.Services[0].Name;

            // Initialize a service description servImport
            ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
            servImport.AddServiceDescription(sd, String.Empty, String.Empty);
            servImport.ProtocolName = "Soap";
            servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

            CodeNamespace nameSpace = new CodeNamespace();
            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
            codeCompileUnit.Namespaces.Add(nameSpace);
            // Set Warnings
            ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit);

            if (warnings == 0)
            {
                StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture);
                Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider();
                prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions());

                // Compile the assembly with the appropriate references
                string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
                CompilerParameters param = new CompilerParameters(assemblyReferences);
                param.GenerateExecutable = false;
                param.GenerateInMemory = true;
                param.TreatWarningsAsErrors = false;
                param.WarningLevel = 4;

                CompilerResults results = new CompilerResults(new TempFileCollection());
                results = prov.CompileAssemblyFromDom(param, codeCompileUnit);
                Assembly assembly = results.CompiledAssembly;
                service = assembly.GetType(sdName);

                string input_params = "";
                string return_type = "";

                MethodInfo[] methodInfo = service.GetMethods();

                foreach (MethodInfo t in methodInfo)
                {
                    List<string> valueNames = new List<string>();
                    if (t.Name == "Discover")
                        break;

                    input_params = "";
                    return_type = "";

                    foreach (ParameterInfo parameter in t.GetParameters())
                    {
                        //paramname.Text = "(" + temp.ParameterType.Name + "  " + temp.Name + ")";
                        input_params = input_params + parameter.Name + ":" + parameter.ParameterType.Name + " ";
                    }

                    //Get The Return type of the Service(Method)
                    return_type = t.ReturnType.ToString();

                    //Insert into Service Object(Methods Table)
                    valueNames.Add(Session["OrgID"].ToString());
                    valueNames.Add(wsdl_text);
                    valueNames.Add(t.Name);
                    valueNames.Add(input_params);
                    valueNames.Add(return_type);
                    bool success = serviceObj.InsertData(11, 30, "WSDL-Instance", fieldnames.ToArray(), valueNames.ToArray());
                    if (success == false)
                    {
                        return -1;
                    }
                }

                return 1;
            }
            else
            {
                return -1;
            }
        }
        catch (Exception ex)
        {
            return -1;
        }
    }
예제 #33
0
    void GetServiceDetails()
    {
        var url = Request["service"];
        if (string.IsNullOrEmpty(url))
        {
            return;
        }

        if (!url.ToLowerInvariant().EndsWith("?wsdl"))
            url += "?wsdl";

        try
        {
            using (WebClient wc = new WebClient())
            {
                string content = wc.DownloadString(url);
                var des = wc.DownloadString(url);

                var sd = ServiceDescription.Read(new StringReader(des));
                ServiceDescriptionImporter im = new ServiceDescriptionImporter();
                im.AddServiceDescription(sd, null, null);
                im.Style = ServiceDescriptionImportStyle.Client;
                im.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

                CodeNamespace ns = new CodeNamespace();
                CodeCompileUnit unit = new CodeCompileUnit();
                unit.Namespaces.Add(ns);

                ServiceDescriptionImportWarnings warning = im.Import(ns, unit);

                if (warning == 0)
                {
                    var domProvider = CodeDomProvider.CreateProvider("CSharp");
                    var assemblyReferences = new string[] { "System.Web.Services.dll", "System.Xml.dll" };
                    var parms = new CompilerParameters(assemblyReferences);
                    var results = domProvider.CompileAssemblyFromDom(parms, unit);

                    if (results.Errors.Count > 0)
                    {
                        Response.Output.WriteLine("{ 'error' : [");
                        foreach (CompilerError ce in results.Errors)
                        {
                            Response.Output.WriteLine("'{0}',", Utils.EscapeString(ce.ErrorText));
                        }
                        Response.Output.WriteLine("]}");
                    }

                    object o = results.CompiledAssembly.CreateInstance("WebService");
                    Type t = o.GetType();
                }
                else
                {
                    Console.WriteLine("Warning: " + warning);
                }
            }
        }
        catch (Exception e)
        {
            Response.Output.WriteLine("{{ 'error' : '{0}' }}", Utils.EscapeString(e.Message));
        }
    }
    private string InvokeMethod(string wsdl_text,string MethodName,Object[] param1)
    {
        try
        {
            Uri uri = new Uri(wsdl_text);
            WebRequest webRequest = WebRequest.Create(uri);
            System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();

            // Get a WSDL file describing a service
            ServiceDescription sd = ServiceDescription.Read(requestStream);
            string sdName = sd.Services[0].Name;

            // Initialize a service description servImport
            ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
            servImport.AddServiceDescription(sd, String.Empty, String.Empty);
            servImport.ProtocolName = "Soap";
            servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

            CodeNamespace nameSpace = new CodeNamespace();
            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
            codeCompileUnit.Namespaces.Add(nameSpace);
            // Set Warnings
            ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit);

            if (warnings == 0)
            {
                StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture);
                Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider();
                prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions());

                // Compile the assembly with the appropriate references
                string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
                CompilerParameters param = new CompilerParameters(assemblyReferences);
                param.GenerateExecutable = false;
                param.GenerateInMemory = true;
                param.TreatWarningsAsErrors = false;
                param.WarningLevel = 4;

                CompilerResults results = new CompilerResults(new TempFileCollection());
                results = prov.CompileAssemblyFromDom(param, codeCompileUnit);
                Assembly assembly = results.CompiledAssembly;
                service = assembly.GetType(sdName);

                MethodInfo[] methodinfo = service.GetMethods();
                string result = null;

                foreach (MethodInfo t in methodinfo)
                if (t.Name == MethodName)
                {
                    //Invoke Method
                    Object obj = Activator.CreateInstance(service);
                    Object response = t.Invoke(obj, param1);

                    Array myArrayList = response as Array;
                    if (myArrayList != null)
                    {
                        List<Object> result_obj = new List<Object>();

                        foreach (var item in myArrayList)
                        {
                            foreach (var currentPropertyInformation in item.GetType().GetProperties())
                            {
                                //currentPropertyInformation.GetValue(item, null);
                                //Result.Text = Result.Text + currentPropertyInformation.Name + ":" + currentPropertyInformation.GetValue(item, null);
                                result = currentPropertyInformation.GetValue(item, null).ToString();
                            }
                        }
                    }
                    else if(response.GetType().ToString() != "System.String")
                    {
                        foreach (var currentPropertyInformation in response.GetType().GetProperties())
                        {
                            //currentPropertyInformation.GetValue(item, null);
                            //Result.Text = Result.Text + currentPropertyInformation.Name + ":" + currentPropertyInformation.GetValue(item, null);
                            if (currentPropertyInformation.GetValue(response, null) != null)
                            {
                                result = result + currentPropertyInformation.Name + ":" + currentPropertyInformation.GetValue(response, null) + "|";
                            }
                            else
                            {
                                result = result + currentPropertyInformation.Name + ":NULL,";
                            }
                        }

                    }

                    if(response!=null && result==null)
                    {
                        result =  response.ToString();
                    }

                    break;
                }
                    return result;
            }
            else
            {
                return null;
            }
        }
        catch (Exception ex)
        {
            return null;
        }
    }
예제 #35
0
    private void DynamicInvocation(string wsUrl, TreeView tv, ref MethodInfo[] methodInfo)
    {
        try
        {

            Uri uri = new Uri(wsUrl); //txtUrl.Text);

            WebRequest webRequest = WebRequest.Create(uri);
            System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();
            // Get a WSDL file describing a service
            ServiceDescription sd = ServiceDescription.Read(requestStream);
            string sdName = sd.Services[0].Name;
            // Add in tree view
            TreeNode n = new TreeNode(sdName);
            tv.Nodes.Add(n);
            //treMethods.Nodes.Add(n);

            // Initialize a service description servImport
            ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
            servImport.AddServiceDescription(sd, String.Empty, String.Empty);
            servImport.ProtocolName = "Soap";
            servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

            CodeNamespace nameSpace = new CodeNamespace();
            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
            codeCompileUnit.Namespaces.Add(nameSpace);
            // Set Warnings
            ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit);

            if (warnings == 0)
            {
                StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture);
                Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider();
                prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions());

                // Compile the assembly with the appropriate references
                string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
                CompilerParameters par = new CompilerParameters(assemblyReferences);
                par.GenerateExecutable = false;
                par.GenerateInMemory = true;
                par.TreatWarningsAsErrors = false;
                par.WarningLevel = 4;

                CompilerResults results = new CompilerResults(new TempFileCollection());
                results = prov.CompileAssemblyFromDom(par, codeCompileUnit);
                Assembly assembly = results.CompiledAssembly;
                service = assembly.GetType(sdName);

                methodInfo = service.GetMethods();
                foreach (MethodInfo t in methodInfo)
                {

                    if (t.Name == "Discover")
                        break;

                    n = new TreeNode(t.Name);
                    tv.Nodes[0].ChildNodes.Add(n);

                }

                tv.Nodes[0].Expand();

            }
            else
                lblMsg.Text += warnings;
        }
        catch (Exception ex)
        {
            lblMsg.Text += "\r\n" + ex.Message + "\r\n\r\n" + ex.ToString(); ;

        }
    }