版权声明:本文为博主原创文章,未经博主允许不得转载。          https://blog.csdn.net/u011508145/article/details/79496214

using Microsoft.CSharp;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO; using System.Net; using System.Text; using System.Web.Services.Description; namespace Utils { public class WebServiceHelper { /// <summary> /// 动态调用WebService /// </summary> /// <param name="url">WebService地址</param> /// <param name="classname">类名</param> /// <param name="methodname">方法名(模块名)</param> /// <param name="args">参数列表</param> /// <returns>object</returns> public static object InvokeWebService(string url, string classname, string methodname, object[] args) { string @namespace = "ServiceBase.WebService.DynamicWebLoad"; if (classname == null || classname == "") { classname = WebServiceHelper.GetClassName(url); } //获取服务描述语言(WSDL) WebClient wc = new WebClient(); Stream stream = wc.OpenRead(url + "?WSDL"); ServiceDescription sd = ServiceDescription.Read(stream); 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;// 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 = csc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new StringBuilder(); foreach (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); } private static string GetClassName(string url) { string[] parts = url.Split('/'); string[] pps = parts[parts.Length - 1].Split('.'); return pps[0]; } } }

转载于:https://www.cnblogs.com/xihong2014/p/10967041.html

C# Web Service 不使用服务引用直接调用方法(转)相关推荐

  1. Windows Phone访问web service和WCF服务

    Windows phone也像传统的.net应用一样,可以方便的调用web service和WCF服务. 首先创建一个web service服务,因为.NET Framework 4的版本没有Web ...

  2. 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步,新建一个工程,如图: 选 Java 写一个工程名,选择好工程路径 ...

  3. Web Service实现分布式服务的基本原理

    简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Se ...

  4. [Axis2与Eclipse整合开发Web Service系列之三] 服务端返回值

    前言 在前面的三篇中 [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码) [Axis2与Eclipse整 ...

  5. 【网址收藏】dubbo特新概念及特性、环境搭建、dubbo-monitor安装、rpc原理以及dubbo原理:框架设计、启动解析加载配置信息、服务暴露、服务引用及调用

    https://blog.csdn.net/qq_41157588/article/details/106737191

  6. 接口引用变量调用方法

    接口可以创建对象的引用,指向实现了该接口的类的对象.但引用变量只能调用接口本身提供的方法(在类中被重写的),例如: interface A{ public abstract void read(); ...

  7. 添加web引用和添加服务引用有什么区别?

    添加web引用和添加服务引用有什么区别, Add Service References 和 Add Web References 有啥区别? 参考 http://social.microsoft.co ...

  8. [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

    前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建 ...

  9. VB.Net编程实现Web Service的基础

    Web Service目前可是目前计算机界一个非常流行的技术了,以至于有些人把Web Service列入目前最热门的十大技术之一.的确随着互联网的广泛应用和发展,尤其是电子商务的发展,出于互联网上各种 ...

  10. 一步一步学Silverlight 2系列(33):Silverlight 2应用Web Service两例

    概述 我们知道,在Silverlight 2中提供了丰富的网络通信API,包括支持SOAP服务.REST服务.基于HTTP通信.Socket通信等.本文我将通过几个示例来演示如何在Silverligh ...

最新文章

  1. 混合颜料(求线性组的基)
  2. XamarinEssentials教程获取首选项的值
  3. python爬虫源码下载 视频_Python爬虫下载视频文件部分源码
  4. 在linux下创建自定义service服务
  5. 牛客网 在线编程 局部最小值位置
  6. leetcode915. 分割数组
  7. laravel的重定向
  8. Python使用socket读取网页源代码实现简单爬虫程序
  9. 大学计算机课程复习--软件工程
  10. 带你走近AngularJS - 体验指令实例
  11. 海康服务器找不到网卡驱动,驱动技巧:解决设备管理器中找不到网卡的问题
  12. java版flashplayer下载安装_mac版flash player
  13. 从零开始学会做一个简单的APP
  14. VC编程调用dxdiag生成XML文件,来获取系统配置情况
  15. Vue中使用marked
  16. 安徽师大附中%你赛day5 T3 树上行走 解题报告
  17. 电脑打印机老是文档挂起无法打印怎么办
  18. ASCII 控制码说明
  19. 视频教程-软考系统集成项目管理工程师视频教程(上)-软考
  20. 【LeetCode】详解环形链表141. Linked List Cycle Given a linked list, determine if it has a cycle in it. To

热门文章

  1. c#简易学生信息管理系统
  2. IEEE VIS 2018专题
  3. 如何在不确定经济形势下把握好企业脉搏
  4. 海蜘蛛理由器做端口映射
  5. 如何查看mysql数据库中各个表的大小
  6. 打开游戏要运行19.8亿次 if 语句?黑客嘲讽RockStar游戏代码太烂了
  7. 离阿里最近的机会,来了!
  8. 留学生吐槽阿里面试几宗罪:槽点太多,不符合阿里大企业形象!
  9. 大前端架构思考与选择
  10. 深度好文:迄今见过最好的职业规划的文章