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 ...
随机推荐
- javascript 数据类型转换
javascrīpt 类型转换函数 在Javascrīpt中,Double类型和Int类型都是看作为Number对象. 1.Number转成String number.toString() Strin ...
- Java基础相关总结
临近面试,权当复习了吧 final相关 定义常量的方法 eg:final int i=0;//则i不能被修改 final修饰的类不能被继承,因此没有子类,且它的类中的方法默认是final final ...
- JVM初探 -JVM内存模型
JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时 ...
- 打开Excel的报错,提示:不能使用对象链接和嵌入
计算机这几天在打开Excel文档的时候,提示:不能使用对象链接和嵌入, 而且出现如下的提示:Microsoft Office Excel进程已停止工作, 每次打开Excel的时候都是同样的问题,害我跟 ...
- xcode7 The operation couldn't be completed.
问题描述:当运行Xcode6时,编译代码成功,但是登陆模拟器失败,显示错误:The Operation couldn't be completed.(LaunchServicesError error ...
- thusc滚粗记
day0 下午到了北京,雾霾还是那么大.. 到宾馆报个到,和哥哥吃了一波饭,去不起西郊...只能去五道口了... 晚上和wyz队长见面,wyz队长好帅啊...没带手机拍照真是个错误TAT day1 今 ...
- leetcode 142. Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...
- 跟着百度学PHP[4]-OOP面对对象编程-2-属性和方法
简单的说 变量就是成员属性函数就是成员方法(方法有三:构造方法[即为__construct].成员方法.析构方法[__destruct]) 成员方法和成员属性都是可以加修饰词.比如封装性的方法或者属性 ...
- git 教程(6)--管理修改
现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...
- sone2(未完成)
先留个半完成代码 边看论文边看题解写的...难受.. #include<cstdio> #include<cstring> namespace utils{ inline in ...