加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebServiceHelper类

发布时间:2020-12-17 02:02:56 所属栏目:安全 来源:网络整理
导读: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.Des
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];  

        }  

     }  

 } 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读