来源:网络,自己做修改
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的更多相关文章

  1. 用C#访问Dynamic AX的WebService.

    第 1 步:创建 C# WinForm 应用程序 针对本演练,您将创建访问报表服务器 Web 服务的简单控制台应用程序.本演练假定您是在 Visual Studio 环境中进行开发的.测试范例基于VS ...

  2. Atitit webservice发现机制 WS-Discovery标准的规范attilax总结

    Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1.   ...

  3. 不一样的dynamic解析json 万能方法

    写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...

  4. cxf设置代理访问webservice接口

    由于业务上的需要,需要访问第三方提供的webservice接口,但由于公司做了对外访问的限制,不设置代理是不能外网的,如果使用http设置代理访问外网还是比较容易的,但使用cxf有点不知道从哪里入手. ...

  5. 动态调用WebService(C#) (非常实用)

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...

  6. cxf webservice简单应用

    Server端 server部署到一个端口号为80的tomcat中 CXFController.java package com.lwj.controller; import java.io.IOEx ...

  7. 使用CXF发布WebService

    这里普及一下WebService和cxf的知识.关于webservice和cxf:   WebService.各种提供服务的组件     .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...

  8. 使用Axis2建立WebService

    Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版:   建立一个最简单的Axis2  W ...

  9. C# winform 动态调用WebService

    封装的通用方法: using System; using System.Collections.Generic; using System.Text; using System.Xml; using ...

随机推荐

  1. Maven Eclipse (m2e) SCM connector for subclipse 1.10 (svn 1.8) 无法检测

    用新东西总是会有一些风险,尤其是相互的依赖和版本问题. 为了体验最新Eclipse Mars,Version: Mars Milestone 1 (4.5.0M1),Eclipse安装之后需要安装一些 ...

  2. 有关Highchart的那些事。。。备份一段(稍后修改)

    $(function () { $('#CurrentFinanceChart').highcharts({ title: { text: '' }, xAxis: { type: 'datetime ...

  3. C#创建windows服务列表

    转载自:http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html Windows Service这一块并不复杂,但是注意事项太多了,网上 ...

  4. js反序列化时间

    var time = "/Date(1279270720000+0800)/"; var tme1 = ChangeDateFormat(time); alert(tme1); J ...

  5. 【Tomcat】tomcat报错 removeGeneratedClassFiles failed

    程序放到测试环境一点问题没有,放到正式环境都是问题.总感觉是环境的问题,环境能带来问题,但是不是所有问题都能说是环境带来的. 这点,要改正.还要淡定对待问题.看错误. 程序是不会骗你的.这个问题折磨了 ...

  6. ROS Hotspot服务器的搭建与设定!(上网认证)

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 说明:由于Hotspot设定的步骤比较多,此文档只讲解如何设定Hotspot的方法,关于ROS的安装与路由上网的配置请自行百度查阅. ...

  7. [C++基础]关于对象的创建及内存分配

    测试: #include <stdio.h>#include <QDebug> class KPoint{public: KPoint(int x, int y){ nx = ...

  8. 给Storyboard设置初始页面(Initial Controller)

    原文:https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/SetInitialContr ...

  9. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  10. Codeforces Round #336 Hamming Distance Sum

    题目: http://codeforces.com/contest/608/problem/B 字符串a和字符串b进行比较,以题目中的第一个样例为例,我刚开始的想法是拿01与00.01.11.11从左 ...