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