http://www.cnblogs.com/xffy1028/archive/2012/05/07/2487595.html

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Net;

using System.IO;

using System.Web.Services.Description;

using System.CodeDom;

using Microsoft.CSharp;

using System.CodeDom.Compiler;

using System.Reflection;

namespace HTTPS

{

    public class WSHelper

    {

        /// < summary>          

        /// 动态调用web服务        

        /// < /summary>         

        /// < param name="url">WSDL服务地址< /param>

        /// < param name="methodname">方法名< /param>          

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

        /// < returns>< /returns>         

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

        {

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

        }

        /// < summary>         

        /// 动态调用web服务

        /// < /summary>         

        /// < param name="url">WSDL服务地址< /param>

        /// < param name="classname">类名< /param> 

        /// < param name="methodname">方法名< /param> 

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

        /// < returns>< /returns>

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

        {

            string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            if ((classname == null) || (classname == ""))

            {

                classname = WSHelper.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 icc = new CSharpCodeProvider();

                //设定编译参数                

                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);

                // PropertyInfo propertyInfo = type.GetProperty(propertyname);    


                //return propertyInfo.GetValue(obj, null);

            }

            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];

        }

    }

}

调用

string url = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";

            string[] args = new string[2];

            args[0] = "k123";

            args[1] = "";

            object result = WSHelper.InvokeWebService(url, "getDetailInfoByTrainCode", args);

            DataSet ds = (DataSet)result;

            this.GridView1.DataSource = ds;

            this.GridView1.DataBind();

反射结果

http://blog.csdn.net/study_live/article/details/5225073

public void PrintData(object o)

    {

        Type Tp = o.GetType();

        FieldInfo[] fields = Tp.GetFields();

        Response.Write("Fields:<br/>");

        for (int i = 0; i < fields.Length; ++i)

        {

            FieldInfo filed = fields.GetValue(i) as FieldInfo;

            string str = String.Format("Field Name:{0}/tField Value:{1}", filed.Name, filed.GetValue(o));

            Response.Write(str + "<br/>");

        }

        Response.Write("<br/>");

    }

最新文章

  1. js事件模型与自定义事件
  2. 解决在IE中返回JSON格式的数据时提示下载的问题
  3. linux添加动态库搜索路径
  4. js判断输入是否为空,获得输入的类型
  5. android 随手记 倒计时
  6. configSections(配置文件)
  7. 并查集及其简单应用:优化kruskal算法
  8. Object的增。删。查。改。遍历
  9. iPhone、iPad强制关机
  10. Windsock套接字I/O模型学习 --- 第三章
  11. [UWP]做个调皮的BusyIndicator
  12. JAVA中String类型的字符替换问题
  13. js 防抖 debounce 与 节流 throttle
  14. 部署eclipse项目到tomcat
  15. idea报错:[2016-08-31 09:20:10,763] Artifact xxx:war exploded: Error during artifact deployment.
  16. idea 常见快捷键记录下
  17. odoo开发笔记:抛出警告的方式
  18. MFC+WinPcap编写一个嗅探器之二(界面)
  19. Power Network (poj 1459 网络流)
  20. (转)USB 基本知识

热门文章

  1. 为数不多的人知道的 Kotlin 技巧及解析
  2. 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?
  3. Centos配置网络和主机映射
  4. Spark的两种核心Shuffle详解
  5. Distribute SSH Pubkey to Multiple Hosts with Fabric
  6. Ubuntu安装ssh,及失败解决方案
  7. uniapp scroll-view 组件横向滑动失效(ios问题出的最多)
  8. SSH以及ROS远程登录设置保姆级教程
  9. 被MySQL慢日志查询搞废了?3分钟教你快速定位慢查询问题!
  10. WPF 中的 经典的ModelView 通知页面更新 UI