关于System.Reflection.MethodInfo中Invoke(obj, args)方法参数

小茶杯 2013-12-10 01:40:13
小弟在动态调用webservice中用到了反射Invoke方法,
Invoke方法中的第二个参数是object[] parameters
我想给object参数集合传Datatable类型的
例如object[] args = new object[3];
args[0]="a";
args[1]="b";
DataTable dt=new DataTable;
arags[2]=dt;

但是报错,参数无效,越界了,业务要求我必须传输Datatable进去,怎么办啊,求大神们指教。
代码:
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);--越界
...全文
697 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小茶杯 2013-12-17
  • 打赏
  • 举报
回复
引用 5 楼 ydscom 的回复:
追加个问题: 使用System.XML.schema 和System.Web.Service.Description这两命名空间实现,读取任意一个指定的WSDL文件,输出接口定义信息,参数,返回类型,还有Web服务端点。 今天结贴啦,求回复!
自己顶一下求回复
小茶杯 2013-12-17
  • 打赏
  • 举报
回复
自己顶一下,求回复。
小茶杯 2013-12-17
  • 打赏
  • 举报
回复
追加个问题: 使用System.XML.schema 和System.Web.Service.Description这两命名空间实现,读取任意一个指定的WSDL文件,输出接口定义信息,参数,返回类型,还有Web服务端点。 今天结贴啦,求回复!
风一样的大叔 2013-12-11
  • 打赏
  • 举报
回复
两千条还是扛得住的
t101lian 2013-12-10
  • 打赏
  • 举报
回复
引用 2 楼 ydscom 的回复:
问题找到了,谢谢回复的大哥,不过我还想请教下大哥,关于webservice中用Datatable作为参数性能怎么样? 大约2千条数据。
2千条绝对没问题, 我们公司的项目就有用Datatable作为参数的,运行挺好的
小茶杯 2013-12-10
  • 打赏
  • 举报
回复
问题找到了,谢谢回复的大哥,不过我还想请教下大哥,关于webservice中用Datatable作为参数性能怎么样? 大约2千条数据。
宝_爸 2013-12-10
  • 打赏
  • 举报
回复
贴详细错误信息和StackTrace.
动态调用WebService的方法类,可以不用在VS本地引用,直接动态调用即可。 样例如下: /// /// 实例化WebServices /// /// WebServices地址 /// 调用的方法 /// 把webservices里需要的参数按顺序放到这个object[]里 public static object InvokeWebService(string url, string methodname, object[] args) { //这里的namespace是需引用的webservices的命名空间,我没有改过,也可以使用。也可以加一个参数从外面传进来。 //string @namespace = "Nq.Application.WebService"; string @namespace = "client"; try { //获取WSDL WebClient wc = new WebClient(); //Stream stream = wc.OpenRead(url); 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 =

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧