通过反射动态调用webservices
该方法可以使程序不通过web引用的方式去调用webservices方法,直接在代码里调用该方法就能达到动态调用webservices的目的。使用前先引用System.Web.Services动态链接库,是.net自带的dll。
方法如下:
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace TestSkin
{
class Webservices
{
/// <summary>
/// 实例化WebServices
/// </summary>
/// <param name="url">WebServices地址</param>
/// <param name="methodname">调用的方法</param>
/// <param name="args">把webservices里需要的参数按顺序放到这个object[]里</param>
public static object InvokeWebService(string url, string methodname, object[] args)
{
//这里的namespace是需引用的webservices的命名空间,在这里是写死的,大家可以加一个参数从外面传进来。
string @namespace = "client";
try
{
//获取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url + "?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
string classname = sd.Services[0].Name;
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 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);
}
catch
{
return null;
}
}
}
}
转载于:https://www.cnblogs.com/ruochen/archive/2007/12/11/990427.html
通过反射动态调用webservices相关推荐
- (C#)利用反射动态调用类成员[转载]
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name ...
- 利用反射动态调用类成员C#
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name ...
- C# 利用反射动态调用类成员
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下: public object InvokeMember( string name, BindingFla ...
- 反射动态调用DLL类库测试
定义:可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌 ...
- C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- 通过.NET反射动态调用SetValue方法给属性PropertyInfo动态类型赋值
注意:若不动态转换属性的值,简单调用SetValue方法赋值经常出错!特别是日期类型.带符号的数字类型等. 解决方案: 通过TypeDescriptor.GetConverter方法获取对应数值类型的 ...
- 如何动态调用WebServices
我们都知道,调用WS可以在工程中添加对WS的WEB引用. 但是,如果我们不想通过添加引用的方式,而是在代码中动态引用该怎么办呢? 首先,我们该想到WS的实现也是一个类的形式. 其次,WS在传输过程中是 ...
- 利用.Net中的反射动态调用方法
.Net中的反射功能是极其强大的,本篇先用他来动态调用方法 看如下一个类 Public Class A { public void InvokeMethod(string methodname) { ...
- java反射 动态调用_java反射拼接方法名动态执行方法
近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...
最新文章
- python中if else语句用法_讲解Python中if语句的嵌套用法
- 【c语言】蓝桥杯算法提高 JOE的算数
- Data source rejected establishment of connection, message from server: Too many connections
- 【CodeIgniter 】解惑
- windows mongdb 安装
- Ubuntu18.04 可用字体库
- 在Dreamweaver中安装Emmet(zen-coding)
- 牛客网 链表结构 算法相关内容
- 【uoj#174】新年的破栈 贪心
- 安装、配置文件-配置 CACTI 监控 MySQL 数据库状态-by小雨
- SysTick系统定时器(功能框图和优先级配置)
- Atitit.软件gui按钮and面板---os区-----linux windows搜索文件 文件夹
- Linux 下载GCC
- ECshop新手入门模板制作教程[转载]
- MySQL基础知识,入门必备
- 计算机的标点符号有哪些,电脑标点符号怎么打出来,四个电脑小技巧轻松输入各种符号...
- 中文和英语中主语、谓语、宾语、定语、状语、补语的定义
- 计算所汉语词性标记集
- win10家庭版系统升级
- HTML期末学生大作业-节日网页作业html+css+javascript
热门文章
- 你一定会用的18个linux网络监控工具
- 华为HCIE RS都考什么?(含选择及面试题)
- Java 线上问题排查神器 Arthas 快速上手与原理浅谈
- 电脑硬件知识学习_DIY电脑多年,这些硬件冷知识你们知道吗?
- java表单上下左右滚动_怎么在网页中实现表格上下左右滚动
- pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
- java jdom格式_Java全面解析XML格式串(JDOM解析)
- java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...
- 计算机视觉,图像处理 经典代码paper整理(很全很强大!)
- MeanShift 目标跟踪