Dynamic Invok Webservice
来源:网络,自己做修改
CSharpCodeProvider csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();
会提示已经过时,
现在修改为 CodeDomProvider csc= CodeDomProvider.CreateProvider("CSharp"); 调用:
string pcUrl = "http://localhost:8089/test.asmx";
string pcClassName = "";
string pcMethodName = "GetData";
object[] objs = new object[];
objs[] = "";
DataSet ds = DynamicWebServiceCall.InvokeWebService(pcUrl, pcClassName, pcMethodName, objs) as DataSet; [csharp] view plain copy print?
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp; /// <summary>
/// 动态调用WebService 的相关方法
/// </summary>
public sealed class DynamicWebServiceCall
{
/// <summary>
/// 动态调用WebService 的方法
/// </summary>
/// <param name="pcUrl">WebService 的访问路径 http://localhost:8080/WebServiceTest.asmx </param>
/// <param name="pcClassName">要调用的类名</param>
/// <param name="pcMethodName">方法名</param>
/// <param name="args">方法参数</param>
/// <returns></returns>
public static object InvokeWebService(string pcUrl, string pcMethodName, object[] args)
{
return InvokeWebService(pcUrl, "", pcMethodName, args);
}
/// <summary>
/// 动态调用WebService 的方法
/// </summary>
/// <param name="pcUrl">WebService 的访问路径 http://localhost:8080/ 或 http://localhost:8080/WebServiceTest.asmx </param>
/// <param name="pcClassName">要调用的类名,当Url里已经传动了类名的时候,这里设置为“”</param>
/// <param name="pcMethodName">方法名</param>
/// <param name="args">方法参数</param>
/// <returns></returns>
public static object InvokeWebService(string pcUrl, string pcClassName, string pcMethodName, object[] args)
{
object loRetVal = null; try
{
if (!string.IsNullOrEmpty(pcClassName))
{
pcUrl += pcClassName;
}
else
{
pcClassName = GetWsClassName(pcUrl);
} Assembly loAssemble = CreateDynWebServiceAssemble(pcUrl);
if (loAssemble != null)
{
string lcNameSpace = "Sonic.Web.WebService.DynamicWebService";
Type t = loAssemble.GetType(lcNameSpace + "." + pcClassName, true, true);
object obj = Activator.CreateInstance(t);
MethodInfo loMethodInfo = t.GetMethod(pcMethodName);
if (loMethodInfo != null)
loRetVal = loMethodInfo.Invoke(obj, args);
}
}
catch (Exception e)
{
loRetVal = null;
throw e;
}
return loRetVal;
} /// <summary>
/// 动态创建WebService的Assembly
/// </summary>
/// <param name="pcUrl">WebService 的访问路径 入 http://localhost:8080/WebServiceTest.asmx</param>
/// <returns></returns>
private static Assembly CreateDynWebServiceAssemble(string pcUrl)
{
Assembly loRetVal = null;
string lcNameSpace = "Sonic.Web.WebService.DynamicWebService";
try
{
//获取WSDL
WebClient loWC = new WebClient();
Stream stream = loWC.OpenRead(pcUrl + "?WSDL"); ServiceDescription sd = ServiceDescription.Read(stream);
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
sdi.AddServiceDescription(sd, "", "");
CodeNamespace cn = new CodeNamespace(lcNameSpace); //生成客户端代理类代码
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn, ccu);
//CSharpCodeProvider csc = new CSharpCodeProvider();
//ICodeCompiler icc = csc.CreateCompiler(); //已过时
CodeDomProvider csc = CodeDomProvider.CreateProvider("CSharp"); //设定编译参数
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 System.Text.StringBuilder();
foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
throw new Exception(sb.ToString());
} //生成代理实例,并调用方法
loRetVal = cr.CompiledAssembly;
}
catch (Exception e)
{
loRetVal = null;
throw e;
} return loRetVal;
} private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/');
string[] pps = parts[parts.Length - ].Split('.'); return pps[];
}
}
Dynamic Invok Webservice的更多相关文章
- 用C#访问Dynamic AX的WebService.
第 1 步:创建 C# WinForm 应用程序 针对本演练,您将创建访问报表服务器 Web 服务的简单控制台应用程序.本演练假定您是在 Visual Studio 环境中进行开发的.测试范例基于VS ...
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1. ...
- 不一样的dynamic解析json 万能方法
写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...
- cxf设置代理访问webservice接口
由于业务上的需要,需要访问第三方提供的webservice接口,但由于公司做了对外访问的限制,不设置代理是不能外网的,如果使用http设置代理访问外网还是比较容易的,但使用cxf有点不知道从哪里入手. ...
- 动态调用WebService(C#) (非常实用)
通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...
- cxf webservice简单应用
Server端 server部署到一个端口号为80的tomcat中 CXFController.java package com.lwj.controller; import java.io.IOEx ...
- 使用CXF发布WebService
这里普及一下WebService和cxf的知识.关于webservice和cxf: WebService.各种提供服务的组件 .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...
- 使用Axis2建立WebService
Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版: 建立一个最简单的Axis2 W ...
- C# winform 动态调用WebService
封装的通用方法: using System; using System.Collections.Generic; using System.Text; using System.Xml; using ...
随机推荐
- app的meta
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> < ...
- seo是什么职业
SEO(Search Engine Optimization)汉译为搜索引擎优化.seo从业者首要工作就是优化网站,使其符合搜索引擎的基本规律和满足用户的需求,进而获得大量的用户访问.SEO职业属于一 ...
- Sql导出数据报错-->SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服 ...
- WCF--安全小见解...
由于WCF写的服务需要Ajax来进行调用(这个配置过程也是一个比较咕~~(╯﹏╰)b的经历...), 所以调用的过程都是前台可以看到的,不加点安全措施上去,真的像是一个裸奔在互联网上的接口... 反正 ...
- GATK软件介绍
背景介绍 GATK全称是The Genome Analysis Toolkit,是Broad Institute(The Broad Institute, formerly the Broad Ins ...
- 6.3.28微信需群主确认才可进群&发GIF动图功能内测开始了
昨天下午有网友收到微信6.3.28新版内测邀请,不过这个内部体验目前貌似只对安卓手机开放,苹果的IOS系统还不支持,会提示“你当前使用的是非安卓设备,不建议下载安卓体验包,但你仍可邀请朋友尝鲜”.最新 ...
- 第11天 Stack Queue
1.Stack package algs4; import java.util.Iterator; import java.util.NoSuchElementException; public cl ...
- mysql-mysql优化
mysql数据库优化1.查询优化 (1)避免where 子句中对字段进行 null 值判断 (2)避免在 where 子句中使用 or 来连接条件 (3)少使用like,如果要用可以考虑全文检索 (4 ...
- C#画表格
下面给一个简单的例子,至于多个单元格合并,请自己去实现,也就是坐标计算的事情. 至于画图,用GDI,还是DirectX画,自己选择,不过这里主要讲的是算法:坐标计算以及画的过程. 注意不要每个列都画一 ...
- phpcms万能字段如何使用php方法
来自:http://www.tantengvip.com/2013/12/phpcms-php-function/ phpcms后台内容模块->模型管理->添加字段功能很强大,你只需在ph ...