C# Web Service 不使用服务引用直接调用方法(转)
版权声明:本文为博主原创文章,未经博主允许不得转载。 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 不使用服务引用直接调用方法(转)相关推荐
- Windows Phone访问web service和WCF服务
Windows phone也像传统的.net应用一样,可以方便的调用web service和WCF服务. 首先创建一个web service服务,因为.NET Framework 4的版本没有Web ...
- 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建
转自:https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步,新建一个工程,如图: 选 Java 写一个工程名,选择好工程路径 ...
- Web Service实现分布式服务的基本原理
简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Se ...
- [Axis2与Eclipse整合开发Web Service系列之三] 服务端返回值
前言 在前面的三篇中 [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码) [Axis2与Eclipse整 ...
- 【网址收藏】dubbo特新概念及特性、环境搭建、dubbo-monitor安装、rpc原理以及dubbo原理:框架设计、启动解析加载配置信息、服务暴露、服务引用及调用
https://blog.csdn.net/qq_41157588/article/details/106737191
- 接口引用变量调用方法
接口可以创建对象的引用,指向实现了该接口的类的对象.但引用变量只能调用接口本身提供的方法(在类中被重写的),例如: interface A{ public abstract void read(); ...
- 添加web引用和添加服务引用有什么区别?
添加web引用和添加服务引用有什么区别, Add Service References 和 Add Web References 有啥区别? 参考 http://social.microsoft.co ...
- [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)
前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建 ...
- VB.Net编程实现Web Service的基础
Web Service目前可是目前计算机界一个非常流行的技术了,以至于有些人把Web Service列入目前最热门的十大技术之一.的确随着互联网的广泛应用和发展,尤其是电子商务的发展,出于互联网上各种 ...
- 一步一步学Silverlight 2系列(33):Silverlight 2应用Web Service两例
概述 我们知道,在Silverlight 2中提供了丰富的网络通信API,包括支持SOAP服务.REST服务.基于HTTP通信.Socket通信等.本文我将通过几个示例来演示如何在Silverligh ...
最新文章
- 混合颜料(求线性组的基)
- XamarinEssentials教程获取首选项的值
- python爬虫源码下载 视频_Python爬虫下载视频文件部分源码
- 在linux下创建自定义service服务
- 牛客网 在线编程 局部最小值位置
- leetcode915. 分割数组
- laravel的重定向
- Python使用socket读取网页源代码实现简单爬虫程序
- 大学计算机课程复习--软件工程
- 带你走近AngularJS - 体验指令实例
- 海康服务器找不到网卡驱动,驱动技巧:解决设备管理器中找不到网卡的问题
- java版flashplayer下载安装_mac版flash player
- 从零开始学会做一个简单的APP
- VC编程调用dxdiag生成XML文件,来获取系统配置情况
- Vue中使用marked
- 安徽师大附中%你赛day5 T3 树上行走 解题报告
- 电脑打印机老是文档挂起无法打印怎么办
- ASCII 控制码说明
- 视频教程-软考系统集成项目管理工程师视频教程(上)-软考
- 【LeetCode】详解环形链表141. Linked List Cycle Given a linked list, determine if it has a cycle in it. To