封装这个类是为之后使用 webservice 不用添加各种引用了。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Tex
  7. using System.Net;
  8. using System.IO;
  9. using System.Web.Services.Description;
  10. using System.CodeDom;
  11. using Microsoft.CSharp;
  12. using System.CodeDom.Compiler;
  13. class WebServiceAgent
  14. {
  15. /// <summary>
  16. /// 实例化WebServices
  17. /// </summary>
  18. /// <param name="url">WebServices地址</param>
  19. /// <param name="methodname">调用的方法</param>
  20. /// <param name="args">把webservices里需要的参数按顺序放到这个object[]里</param>
  21. public static object InvokeWebService(string url, string methodname, object[] args)
  22. {
  23.  
  24. //这里的namespace是需引用的webservices的命名空间,我没有改过,也可以使用。也可以加一个参数从外面传进来。
  25. string @namespace = "client";
  26. try
  27. {
  28. //获取WSDL
  29. WebClient wc = new WebClient();
  30. Stream stream = wc.OpenRead(url + "?WSDL");
  31. ServiceDescription sd = ServiceDescription.Read(stream);
  32. string classname = sd.Services[].Name;
  33. ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
  34. sdi.AddServiceDescription(sd, "", "");
  35. CodeNamespace cn = new CodeNamespace(@namespace);
  36.  
  37. //生成客户端代理类代码
  38. CodeCompileUnit ccu = new CodeCompileUnit();
  39. ccu.Namespaces.Add(cn);
  40. sdi.Import(cn, ccu);
  41. CSharpCodeProvider csc = new CSharpCodeProvider();
  42. //ICodeCompiler icc = csc.CreateCompiler();
  43.  
  44. //设定编译参数
  45. CompilerParameters cplist = new CompilerParameters();
  46. cplist.GenerateExecutable = false;
  47. cplist.GenerateInMemory = true;
  48. cplist.ReferencedAssemblies.Add("System.dll");
  49. cplist.ReferencedAssemblies.Add("System.XML.dll");
  50. cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
  51. cplist.ReferencedAssemblies.Add("System.Data.dll");
  52.  
  53. //编译代理类
  54. CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
  55. if (true == cr.Errors.HasErrors)
  56. {
  57. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  58. foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
  59. {
  60. sb.Append(ce.ToString());
  61. sb.Append(System.Environment.NewLine);
  62. }
  63. throw new Exception(sb.ToString());
  64. }
  65.  
  66. //生成代理实例,并调用方法
  67. System.Reflection.Assembly assembly = cr.CompiledAssembly;
  68. Type t = assembly.GetType(@namespace + "." + classname, true, true);
  69. object obj = Activator.CreateInstance(t);
  70. System.Reflection.MethodInfo mi = t.GetMethod(methodname);
  71.  
  72. return mi.Invoke(obj, args);
  73. }
  74. catch
  75. {
  76. return null;
  77. }
  78. }
  79. }

C# 动态调用 webservice 的类的更多相关文章

  1. 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法

    [导读]ServiceDescriptionImporter是创建Web Service 时使用的类,它是引用继承System.Web.Services 当我将VS2005里写的一段代码放在VS201 ...

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

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

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

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

  4. 动态调用webservice(部分转载)

    动态调用webservice,做个笔记: public class WSHelper { /// < summary> /// 动态调用web服务 /// < /summary> ...

  5. C# 动态调用webservice

    最近项目中,用到动态调用webservice的内容,此处记录下来,留着以后COPY(我们只需要在XML,config文件,或者数据库中配置webservice连接地址和方法名即可使用): using ...

  6. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

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

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

  8. WebService – 2.动态调用WebService

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

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

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

随机推荐

  1. HTTP对静态资源的优化

    HTTP的If-Modified-Since和Modified-Since标签 在第一次请求静态资源时响应头会携带一个Modified-Since标签,里面存放的是静态资源的最后修改时间,在之后对该静 ...

  2. iOS 友盟错误分析-2019

    友盟的错误分析越来越人性化了 前提集成了友盟统计,并打包的时候保留了.dSYM文件 先看看效果 可以看到bug显而易见的被发现了!那个文件夹,那一行代码 那么怎么才能这样呢 首先加入符号表,就是.dS ...

  3. java+testng接口测试入门

    testNG是一个测试框架,它能组织测试用例按照你想要的方式进行运行,并输出一定格式的便于阅读的测试报告(结果),通过java+testng的方式说明一下接口测试的基本使用方法. 一.环境搭建 a)千 ...

  4. 如何改善SSH连接过慢(效率)

    +++++++++++++++++++++++++++++++++++++++++问题:通过SSH链接远程Linux主机过慢.重点:学习如何通过调整ssh_config配置文件,提高SSH连接效率.时 ...

  5. 证明与计算(3): 二分决策图(Binary Decision Diagram, BDD)

    0x01 布尔代数(Boolean algebra) 大名鼎鼎鼎的stephen wolfram在2015年的时候写了一篇介绍George Boole的文章:George Boole: A 200-Y ...

  6. Python链表的实现与使用(单向链表与双向链表)

    参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...

  7. C# 使用CsvHelper读取.csv文件

    1,先到包管理器下载 安装CsvHelper. 2,创建一个与csv文件字段名称相同的类 public class SurveyInfoModel { public string DIST_CD { ...

  8. python_正则表达式随笔

    webpage_regex = re.search(r'span_ed7[\s\S]*', dd) [\s\S]* 匹配多行,转义字符 webpage_regex = re.compile('< ...

  9. 回温js算法

    ---恢复内容开始--- 一,冒泡排序. 具体算法描述如下: <1>.比较相邻的元素.如果第一个比第二个大,就交换它们两个: <2>.对每一对相邻元素作同样的工作,从开始第一对 ...

  10. magento 由于Httpd进程增多,导致CPU占用100%问题

    由于Httpd进程增多,导致CPU占用100%问题 magento for version 2.2.3 前些天一直导致CPU无法控制的增多问题. 根据报错我设置了如下内容: [Mysql]mysql. ...