我们专注孝感网站设计 孝感网站制作 孝感网站建设
成都网站建设公司服务热线:18982081108

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

动态调用WebService方法

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Net; 
  6. using System.IO; 
  7. using System.CodeDom.Compiler; 
  8. using System.Reflection; 
  9. using System.Web.Services.Description; 
  10. using System.Xml.Serialization; 
  11. using System.CodeDom; 
  12.  
  13. namespace CN100.Member.Utility 
  14. { 
  15.     public class WebServiceHelper 
  16.     { 
  17.         private static WebServiceHelper webService = null; 
  18.  
  19.         public static WebServiceHelper Instance(string webServiceUrl, string NamSpace) 
  20.         { 
  21.             if (webService == null) 
  22.             { 
  23.                 webService = new WebServiceHelper(webServiceUrl, NamSpace); 
  24.             } 
  25.             return webService; 
  26.         } 
  27.  
  28.         private WebServiceHelper() 
  29.         {  
  30.          
  31.         } 
  32.  
  33.         ///  
  34.         /// webService地址 
  35.         ///  
  36.         public string ServerUrl 
  37.         { 
  38.             get; 
  39.             set; 
  40.         } 
  41.  
  42.         ///  
  43.         /// 调用类命名空间 
  44.         ///  
  45.         public string NameSpace 
  46.         { 
  47.             get; 
  48.             set; 
  49.         } 
  50.  
  51.         private WebServiceHelper(string webServiceUrl, string namSpace) 
  52.         { 
  53.             ServerUrl = webServiceUrl; 
  54.             NameSpace = namSpace; 
  55.         } 
  56.  
  57.         ///  
  58.         /// 生成动态引用DLL 
  59.         ///  
  60.         ///  
  61.         public bool GenerateWebService() 
  62.         { 
  63.             WebClient client = new WebClient(); 
  64.             String url = ServerUrl + "?WSDL";//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL 
  65.             Stream stream = client.OpenRead(url); 
  66.             ServiceDescription description = ServiceDescription.Read(stream); 
  67.             ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。 
  68.             importer.ProtocolName = "Soap"; //指定访问协议。 
  69.             importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。 
  70.             importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; 
  71.             importer.AddServiceDescription(description, null, null); //添加WSDL文档。 
  72.             CodeNamespace nmspace = new CodeNamespace(); //命名空间 
  73.             nmspace.Name = NameSpace; 
  74.             CodeCompileUnit unit = new CodeCompileUnit(); 
  75.             unit.Namespaces.Add(nmspace); 
  76.  
  77.             ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit); 
  78.             CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); 
  79.  
  80.             CompilerParameters parameter = new CompilerParameters(); 
  81.             parameter.GenerateExecutable = false; 
  82.             parameter.OutputAssembly = NameSpace + ".dll";//输出程序集的名称 
  83.             parameter.ReferencedAssemblies.Add("System.dll"); 
  84.             parameter.ReferencedAssemblies.Add("System.XML.dll"); 
  85.             parameter.ReferencedAssemblies.Add("System.Web.Services.dll"); 
  86.             parameter.ReferencedAssemblies.Add("System.Data.dll"); 
  87.  
  88.             CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit); 
  89.             if (result.Errors.HasErrors) 
  90.             { 
  91.                 // 显示编译错误信息 
  92.                 return false; 
  93.             } 
  94.             return true; 
  95.         } 
  96.  
  97.         private Assembly LoadAssembly(string nameSpace) 
  98.         { 
  99.             Assembly asm = null; 
  100.             try 
  101.             { 
  102.                 asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集 
  103.             } 
  104.             catch (FileNotFoundException ex) 
  105.             { 
  106.                 if (GenerateWebService()) 
  107.                 { 
  108.                     asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集 
  109.                 } 
  110.             } 
  111.             catch (Exception e) 
  112.             { 
  113.                 throw e; 
  114.             } 
  115.             return asm; 
  116.         } 
  117.  
  118.         ///  
  119.         /// 执行无返回值方法 
  120.         ///  
  121.         ///  
  122.         ///  
  123.         ///  
  124.         public void ExcuteMethod(string methodName,string nameSpace,object[] args) 
  125.         { 
  126.             Assembly asm = LoadAssembly(nameSpace); 
  127.             Type t = asm.GetType(nameSpace); 
  128.             object o = Activator.CreateInstance(t); 
  129.             MethodInfo method = t.GetMethod(methodName); 
  130.             method.Invoke(o, args); 
  131.         } 
  132.  
  133.         public void ExcuteMethod(string methodName, object[] args) 
  134.         { 
  135.             string nameSpace = NameSpace; 
  136.             ExcuteMethod(methodName, nameSpace, args); 
  137.         } 
  138.  
  139.         ///  
  140.         /// 执行带返回值方法 
  141.         ///  
  142.         ///  
  143.         ///  
  144.         ///  
  145.         ///  
  146.         ///  
  147.         public T ExcuteMethod(string methodName, string nameSpace, object[] args) 
  148.         { 
  149.             Assembly asm = LoadAssembly(nameSpace); 
  150.             Type t = asm.GetType(nameSpace); 
  151.             object o = Activator.CreateInstance(t); 
  152.             MethodInfo method = t.GetMethod(methodName); 
  153.             T result = (T)method.Invoke(o, args); 
  154.             return result; 
  155.         } 
  156.  
  157.         public T ExcuteMethod(string methodName, object[] args) 
  158.         { 
  159.             string nameSpace=NameSpace; 
  160.             return ExcuteMethod(methodName, nameSpace, args); 
  161.         } 
  162.  
  163.     } 
  164. } 

 

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了孝昌免费建站欢迎大家使用!


网页题目:动态调用WebService方法
分享网址:http://www.ytofo.com/article/jsdpcg.html

其他资讯