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

WebServiceHelper类

using System;  


 using System.Collections.Generic;  

 using System.Text;  

    

 using System.IO;  

 using System.Configuration;  

 using System.CodeDom;  

 using System.CodeDom.Compiler;  

 using System.Net;  

 using System.Web.Services;  

 using System.Web.Services.Description;  

 using Microsoft.CSharp;  

    

 namespace InvokeWebService  

 {  

     public static class WebServiceHelper  

     {  

         /// <summary>  

         /// 动态调用WebService  

         /// </summary>  

         /// <param name="url">WebService地址</param>  

         /// <param name="methodname">方法名(模块名)</param>  

         /// <param name="args">参数列表</param>  

         /// <returns>object</returns>  

         public static object InvokeWebService(string url,string methodname,object[] args)  

         {  

             return InvokeWebService(url,null,methodname,args);  

         }  

         /// <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,object[] args)  

         {  

             string @namespace = "ServiceBase.WebService.DynamicWebLoad";  

             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 obj = Activator.CreateInstance(t);  

             System.Reflection.MethodInfo mi = t.getmethod(methodname);  

             return mi.Invoke(obj,args);  

    

         }  

    

         private static string GetClassName(string url)  

         {  

            string[] parts = url.Split('/');  

        string[] pps = parts[parts.Length - 1].Split('.');  

            return pps[0];  

        }  

     }  

 } 

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

相关推荐