webservice 动态调用 invoke


        /// <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");
             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();
             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 = 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 bj = Activator.CreateInstance(t);
             System.Reflection.MethodInfo mi = t.GetMethod(methodname);
             return mi.Invoke(obj, args);
 
         }
 
 
      下面这一种是要导入webservice动态链接库实例化并调用

Assembly asm = Assembly.LoadFrom("test.dll");

Type t = asm.GetType("WProcessFlowController");

 

object o = Activator.CreateInstance(t);

MethodInfo method = t.GetMethod("HelloWorld");

Console.WriteLine(method.Invoke(o, null));

 

 

            assembly = System.Reflection.Assembly.LoadFrom("test.dll");
            type = assembly.GetType("test");
            System.Reflection.MethodInfo method = type.GetMethod("test1");
            obj = assembly.CreateInstance("test");
            DataTable ds = (DataTable)method.Invoke(obj, objs);

            return ds;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM