温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

动态调用WebService方法

发布时间:2020-06-11 16:50:42 阅读:530 作者:chuxue 栏目:编程语言
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.CodeDom.Compiler; using System.Reflection; using System.Web.Services.Description; using System.Xml.Serialization; using System.CodeDom;  namespace CN100.Member.Utility {     public class WebServiceHelper     {         private static WebServiceHelper webService = null;          public static WebServiceHelper Instance(string webServiceUrl, string NamSpace)         {             if (webService == null)             {                 webService = new WebServiceHelper(webServiceUrl, NamSpace);             }             return webService;         }          private WebServiceHelper()         {                   }          /// <summary>         /// webService地址         /// </summary>         public string ServerUrl         {             get;             set;         }          /// <summary>         /// 调用类命名空间         /// </summary>         public string NameSpace         {             get;             set;         }          private WebServiceHelper(string webServiceUrl, string namSpace)         {             ServerUrl = webServiceUrl;             NameSpace = namSpace;         }          /// <summary>         /// 生成动态引用DLL         /// </summary>         /// <returns></returns>         public bool GenerateWebService()         {             WebClient client = new WebClient();             String url = ServerUrl + "?WSDL";//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL             Stream stream = client.OpenRead(url);             ServiceDescription description = ServiceDescription.Read(stream);             ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。             importer.ProtocolName = "Soap"; //指定访问协议。             importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。             importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;             importer.AddServiceDescription(description, null, null); //添加WSDL文档。             CodeNamespace nmspace = new CodeNamespace(); //命名空间             nmspace.Name = NameSpace;             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;             parameter.OutputAssembly = NameSpace + ".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)             {                 // 显示编译错误信息                 return false;             }             return true;         }          private Assembly LoadAssembly(string nameSpace)         {             Assembly asm = null;             try             {                 asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集             }             catch (FileNotFoundException ex)             {                 if (GenerateWebService())                 {                     asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集                 }             }             catch (Exception e)             {                 throw e;             }             return asm;         }          /// <summary>         /// 执行无返回值方法         /// </summary>         /// <param name="methodName"></param>         /// <param name="nameSpace"></param>         /// <param name="args"></param>         public void ExcuteMethod(string methodName,string nameSpace,object[] args)         {             Assembly asm = LoadAssembly(nameSpace);             Type t = asm.GetType(nameSpace);             object o = Activator.CreateInstance(t);             MethodInfo method = t.GetMethod(methodName);             method.Invoke(o, args);         }          public void ExcuteMethod(string methodName, object[] args)         {             string nameSpace = NameSpace;             ExcuteMethod(methodName, nameSpace, args);         }          /// <summary>         /// 执行带返回值方法         /// </summary>         /// <typeparam name="T"></typeparam>         /// <param name="methodName"></param>         /// <param name="nameSpace"></param>         /// <param name="args"></param>         /// <returns></returns>         public T ExcuteMethod<T>(string methodName, string nameSpace, object[] args)         {             Assembly asm = LoadAssembly(nameSpace);             Type t = asm.GetType(nameSpace);             object o = Activator.CreateInstance(t);             MethodInfo method = t.GetMethod(methodName);             T result = (T)method.Invoke(o, args);             return result;         }          public T ExcuteMethod<T>(string methodName, object[] args)         {             string nameSpace=NameSpace;             return ExcuteMethod<T>(methodName, nameSpace, args);         }      } } 
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI