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

    }

webService动态调用及返回至处理的更多相关文章

  1. C# WebService动态调用

    前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...

  2. SOA 下实现分布式 调用 cxf+ webService +动态调用

    近期项目间隙 自学了  webservice   一下 是我写的  一个demo 首先我们在web.xml 里配置如下 <servlet> <servlet-name>CXFS ...

  3. webservice接口调用存储过程返回失败

    poka.cashman.timer.service.impl.PdaOperateServiceImpl - Method Name: cashBoxOutOrIn; cbInfo:JN002015 ...

  4. WEBService动态调用代码

    BasicHttpBinding bind = new BasicHttpBinding(); bind.MaxReceivedMessageSize = int.MaxValue; Endpoint ...

  5. .Net webservice动态调用

    直接贴代码吧 public class PmsService { /// <summary> /// pms接口 /// </summary> /// <param na ...

  6. WebService – 2.动态调用WebService

    在本节课程中,将演示如何通过程序动态添加.调用.编译.执行WebService并返回结果. WebService动态调用示意图 WebService相关知识 代码文档对象模型CodeDom的使用 编程 ...

  7. 调用webservice服务(通过反射的方式动态调用)

    调用 ";//系统类别 var jkxlh = "";//接口序列号 var jkid = "68W05";//接口id string WriteXm ...

  8. .net WebServer示例及调用(接口WSDL动态调用 JAVA)

    新建.asmx页面 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  9. c# 动态调用.net编写的webservices接口

    创建类WebServiceHelper: public class WebServiceHelper { #region 动态调用WebService动态调用地址 /// < summary&g ...

随机推荐

  1. Spring学习笔记-Bean

    Bean作用域(Bean Scope) singleton[单例模式][默认]:全局唯一 <!--显式设置单例模式--> <bean id="accountService& ...

  2. Window2016 安装Docker

    测试环境 Windows2016 DataCenter 安装步骤 1.开始运行"PowerShell" 2.指定Tls协议为1.2.(建议都先执行这一条命令,官方文档没有这一步,实 ...

  3. [源码解析] 机器学习参数服务器 Paracel (2)--------SSP控制协议实现

    [源码解析] 机器学习参数服务器 Paracel (2)-----SSP实现 目录 [源码解析] 机器学习参数服务器 Paracel (2)-----SSP实现 0x00 摘要 0x01 背景知识 1 ...

  4. dubbo学习实践(1)之管理控制台Dubbo-admin部署

    1.Docker拉取现有镜像,构建Dubbo-admin 拉取镜像,这里使用chenchuxin/dubbo-admin docker pull chenchuxin/dubbo-admin 注册中心 ...

  5. 【笔记】ROC曲线

    ROC曲线 前文讲了PR曲线 这里说ROC曲线,其描述的是TPR和FPR之间的关系 TPR是什么呢,TPR就是召回率 FPR是什么呢,FPR就是和TPR对应的,即真实值为0的一行中的预测为1的部分比例 ...

  6. Spring中的@Transactional必须要了解的概念

    spring中的@Transactional基于动态代理的机制,提供了一种透明的事务管理机制,方便快捷解决在开发中碰到的问题. 一般使用是通过如下代码对方法或接口或类注释: 1 @Transactio ...

  7. 题解 d

    传送门 写出来\(n^2\)就有81pts-- \(n^2\)的话枚举最后成为限制的是哪两个矩形,利用前缀和和二分\(n^3\)化\(n^2\)就行了 这题最无脑直接贪心的方法会有后效性 但实际上正解 ...

  8. 栈编程和函数控制流: 从 continuation 与 CPS 讲到 call/cc 与协程

    原标题:尾递归优化 快速排序优化 CPS 变换 call/cc setjmp/longjmp coroutine 协程 栈编程和控制流 讲解 本文为部分函数式编程的扩展及最近接触编程语言控制流的学习和 ...

  9. "image watch" for QtCreator

    Image Watch Image Watch 是Visual Studio的一个插件,用来在C++ 调试时显示内存中的位图图像.可以直观的看到图像的变化而不用添加额外的显示代码.其内建了对OpenC ...

  10. 在C#中使用C++编写的类——用托管C++进行封装

    现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...