1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using System.Web;
  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. using System.Reflection;
  14.  
  15. namespace GEB7.Core.Util
  16. {
  17. public class WSHelper
  18. {
  19.  
  20. /// /// < summary>
  21. /// 动态调用web服务
  22. /// < /summary>
  23. /// < param name="url">WSDL服务地址< /param>
  24. /// < param name="classname">类名< /param>
  25. /// < param name="methodname">方法名< /param>
  26. /// < param name="args">参数< /param>
  27. /// < returns>< /returns>
  28. public static object InvokeWebService(string url, string classname, string methodname, object[] args)
  29. {
  30. string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
  31. if ((classname == null) || (classname == ""))
  32. {
  33. classname = WSHelper.GetWsClassName(url);
  34. }
  35. try
  36. { //获取WSDL
  37. WebClient wc = new WebClient();
  38. Stream stream = wc.OpenRead(url + "?WSDL");
  39. ServiceDescription sd = ServiceDescription.Read(stream);
  40. ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
  41. sdi.AddServiceDescription(sd, "", "");
  42. CodeNamespace cn = new CodeNamespace(@namespace);
  43. //生成客户端代理类代码
  44. CodeCompileUnit ccu = new CodeCompileUnit();
  45. ccu.Namespaces.Add(cn);
  46. sdi.Import(cn, ccu);
  47. CSharpCodeProvider icc = new CSharpCodeProvider();
  48. //设定编译参数
  49. CompilerParameters cplist = new CompilerParameters();
  50. cplist.GenerateExecutable = false;
  51. cplist.GenerateInMemory = true;
  52. cplist.ReferencedAssemblies.Add("System.dll");
  53. cplist.ReferencedAssemblies.Add("System.XML.dll");
  54. cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
  55. cplist.ReferencedAssemblies.Add("System.Data.dll");
  56. //编译代理类
  57. CompilerResults cr = icc.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. System.Reflection.Assembly assembly = cr.CompiledAssembly;
  70. Type t = assembly.GetType(@namespace + "." + classname, true, true);
  71. object obj = Activator.CreateInstance(t);
  72. System.Reflection.MethodInfo mi = t.GetMethod(methodname);
  73. return mi.Invoke(obj, args);
  74. }
  75. catch (Exception ex)
  76. {
  77. throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
  78. }
  79. }
  80. private static string GetWsClassName(string wsUrl)
  81. {
  82. string[] parts = wsUrl.Split('/');
  83. string[] pps = parts[parts.Length - ].Split('.');
  84. return pps[];
  85. }
  86. }
  87. }

在C#中动态调用webService的更多相关文章

  1. ASP.NET中WebService的创建和部署以及通过反射动态调用WebService

    一.在ASP.NET中创建WebService 首先我们先创建一个ASP.NET Web 应用程序,此处我们以VS2017为例 点击新创建的项目,右键添加新建项,选择Web服务,输入名称后点击添加 这 ...

  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. UIView常用属性与方法/UIKit继承结构

    UIView常用属性与方法 @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDy ...

  2. 学习nodejs部分基础内容入门小结

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的包管理器 n ...

  3. 使用WPScan破解wordpress站点密码

    我这里使用的Kali Linux,它默认安装了WPScan. 在使用WPScan之前,先更新它的漏洞数据库: # wpscan –update 扫描wordpress用户 wpscan -–url [ ...

  4. 在Wifi网络中嗅探明文密码(HTTP POST请求、POP等)

    全世界,现在大约50%的网站没有使用SSL加密,天朝尤其多. 我们都知道通过HTTP发送的数据都是明文,没有使用任何加密,即使是在数据敏感的登录页面. 本文的目的是:如果你在不熟悉的网络环境中,要注意 ...

  5. html调bug

    F12-->Sources-->相应文件-->找有波浪线

  6. 关于file.writelines换行符的添加

    和file.readlines/readline不同,file.writelines(l)如果l元素没有换行符,writelines是不会自动加入换行符的,需要我们自己添加,就像这样. import ...

  7. Python之operator库

    operator库常用方法 Function Syntax add(a+b) a + b concat(seq1,seq2) seq1 + seq2 contains(seq, obj) obj in ...

  8. 安装PL/SQL客户端来访问操作步骤

    1 2 3.改变路径 4 5 6 7 8 9.选择注册机 10

  9. 迭代器.NET实现—IEnumerable和IEnumerator (foreach实现)

    能用foreach遍历访问的对象需要实现什么接口或声明什么方法的类型? 答案:能用foreach遍历访问的对象必须是集合或数组对象,而这些都是靠实现超级接口IEnumerable或被声明 GetEnu ...

  10. 转载 iir直接i型和直接ii型滤波器

    1.IIR滤波器构造           之前在介绍FIR滤波器的时候,我们提到过,IIR滤波器的单位冲击响应是无限的!用差分方程来表达一个滤波器,应该是下式这个样子的.                ...