微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态调用WebService服务的方法

         public static object InvokeWebService(string url,string methodname,object[] args)         {             return WebServiceHelper.InvokeWebService(url,null,methodname,args);         }         public static object InvokeWebService(string url,string classname,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);                 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 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.InnerException.Message,new Exception(ex.InnerException.StackTrace));             }         }         private static string GetWsClassName(string wsUrl)         {             string[] parts = wsUrl.Split('/');             string[] pps = parts[parts.Length - 1].Split('.');             return pps[0];         }     }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐