1.url:http://localhost:8002/名称.asmx(asmx结尾)

2.需要引用的命名空间:System.Web.Services

3.调用代码:

  1. public class DynamicWebService
  2. {
  3.  
  4. /// <summary>
  5. /// 动态调用WebService
  6. /// </summary>
  7. /// <param name="url">地址</param>
  8. /// <param name="methodname">方法名</param>
  9. /// <param name="args">参数</param>
  10. /// <returns></returns>
  11. public static object InvokeWebService(string url, string methodname, object[] args)
  12. {
  13. return InvokeWebService(url, null, methodname, args);
  14. }
  15. /// <summary>
  16. /// 动态调用WebService
  17. /// </summary>
  18. /// <param name="url">地址</param>
  19. /// <param name="classname"></param>
  20. /// <param name="methodname">方法名</param>
  21. /// <param name="args">参数</param>
  22. /// <returns></returns>
  23. public static object InvokeWebService(string url, string classname, string methodname, object[] args)
  24. {
  25. string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
  26. if ((classname == null) || (classname == ""))
  27. {
  28. classname = GetWsClassName(url);
  29. }
  30. try
  31. {
  32. //获取WSDL
  33. WebClient wc = new WebClient();
  34. Stream stream = wc.OpenRead(url + "?wsdl");
  35. ServiceDescription sd = ServiceDescription.Read(stream);
  36. ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
  37. sdi.AddServiceDescription(sd, "", "");
  38. CodeNamespace cn = new CodeNamespace(@namespace);
  39.  
  40. //生成客户端代理类代码
  41. CodeCompileUnit ccu = new CodeCompileUnit();
  42. ccu.Namespaces.Add(cn);
  43. sdi.Import(cn, ccu);
  44. CSharpCodeProvider csc = new CSharpCodeProvider();
  45. //ICodeCompiler icc = csc.CreateCompiler();
  46.  
  47. //设定编译参数
  48. CompilerParameters cplist = new CompilerParameters();
  49. cplist.GenerateExecutable = false;
  50. cplist.GenerateInMemory = true;
  51. cplist.ReferencedAssemblies.Add("System.dll");
  52. cplist.ReferencedAssemblies.Add("System.XML.dll");
  53. cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
  54. cplist.ReferencedAssemblies.Add("System.Data.dll");
  55.  
  56. //编译代理类
  57. CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
  58. if (true == cr.Errors.HasErrors)
  59. {
  60. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  61. foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
  62. {
  63. sb.Append(ce.ToString());
  64. sb.Append(System.Environment.NewLine);
  65. }
  66. throw new Exception(sb.ToString());
  67. }
  68.  
  69. //生成代理实例,并调用方法
  70. System.Reflection.Assembly assembly = cr.CompiledAssembly;
  71. Type t = assembly.GetType(@namespace + "." + classname, true, true);
  72. object obj = Activator.CreateInstance(t);
  73. System.Reflection.MethodInfo mi = t.GetMethod(methodname);
  74.  
  75. return mi.Invoke(obj, args);
  76. }
  77. catch (Exception ex)
  78. {
  79. throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
  80. }
  81. }
  82.  
  83. private static string GetWsClassName(string wsUrl)
  84. {
  85. string[] parts = wsUrl.Split('/');
  86. string[] pps = parts[parts.Length - ].Split('.');
  87.  
  88. return pps[];
  89. }
  90. }//end

3.调用示例:

  1. string url = "http://localhost:8002/方法.asmx";
  2. string[] args = new string[];
  3. args[] = "";
  4. object result = DynamicWebService.InvokeWebService(url, "方法名", args);

动态调用webservice 接口的更多相关文章

  1. 动态调用WebService接口的几种方式

    一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...

  2. c#动态调用WEBSERVICE接口

    C#动态webservice调用接口 1 using System; 2 using System.Collections; 3 using System.IO; 4 using System.Net ...

  3. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

  4. 动态调用WebService(C#) (非常实用)

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...

  5. C# .NET 动态调用webservice的三种方式

    转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W ...

  6. WebService – 2.动态调用WebService

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

  7. 用C#通过反射实现动态调用WebService 告别Web引用

    我们都知道,调用WebService可以在工程中对WebService地址进行WEB引用,但是这确实很不方便.我想能够利用配置文件灵活调用WebService.如何实现呢? 用C#通过反射实现动态调用 ...

  8. 动态调用WebService(C#)

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...

  9. 用C#通过反射实现动态调用WebService 告别Web引用(转载)

    我们都知道,调用WebService可以在工程中对WebService地址进行WEB引用,但是这确实很不方便.我想能够利用配置文件灵活调用WebService.如何实现呢? 用C#通过反射实现动态调用 ...

随机推荐

  1. 【TOP10 APP】这些应用成了AppCan千人大会的焦点

    如何评价一款APP的好坏?首先,实用性.一款好的APP,首先要能为用户所用.然后是稳定流畅.闪退.卡顿,这样的APP用起来让人抓狂.再一个,界面美观.视觉主观性,在很大程度上会影响使用情况,毕竟没有人 ...

  2. hdu 5326 Work

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5326 Work Description It’s an interesting experience ...

  3. ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解

        通过终端安装程序sudo apt-get install xxx时出错:   E: Could not get lock /var/lib/dpkg/lock - open (11: Reso ...

  4. 如何让webapi只返回json格式数据

    最近脑子不好用,总记不住事,以前搞过让webapi只返回json格式的数据,今天有人问我又突然想不起了,后来总结一下,备忘一下,大概有下面几种处理方式 1.在WebApiConfig类的Registe ...

  5. CRC校验算法

    typedef unsigned char UCHAR;typedef unsigned char BOOL; /* 计算cnt字节数据的crc,最后一个字节的低7比特必须是0,实际上求的是(cnt× ...

  6. 在package.json中配置Script执行npm run tslint报错问题

    今天在学习tslint的时候,按照git clone下angular2-webpack-starter的代码执行npm run lint时,虽然代码进行了检测,但检测完成后npm始终报错, //pac ...

  7. [DHCP服务]——DHCP详解

    DHCP:(Dynamic Host Configuration Protocol) 动态主机配置协议 1. DHCP是一个局域网的网络协议,采用UDP协议工作 2. DHCP作用 (1)主要应用在大 ...

  8. Windows python 安装 nNumpy、Scipy、matplotlib模块

    折腾了 很久,总结一些. 首先如果python 是64位,安装32位的numpy ,Scipy,或者matplotlib 模块. 会出现很多问题. 比如当你 在python 导入 Numpy 时,导入 ...

  9. CoolShell Puzzle攻略[更新隐藏剧情]

    CoolShell博主陈皓做了一个在线的puzzle很有意思,链接在这里,这里记录一下解题的一些步骤. Puzzle 0 ++++++++[>+>++>+++>++++> ...

  10. C++编程显示四则运算题目

    题目:C++编程显示四则运算题目 设计思路:(1)让用户自己确定出题的数量,同时显示加减乘除四则运算. (2)考虑到用户可能只会一种运算,因此可以选择运算.