/**////
/// 根据指定的信息,调用远程WebService方法
///
/// WebService的http形式的地址
/// 欲调用的WebService的命名空间
/// 欲调用的WebService的类名(不包括命名空间前缀)
/// 欲调用的WebService的方法名
/// 参数列表
/// WebService的执行结果
///
/// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。
/// 异常信息可能会发生在两个地方:
/// 1、动态构造WebService的时候,CompileAssembly失败。
/// 2、WebService本身执行失败。
///
///
///
/// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx",
"Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});
///
///
public static object InvokeWebservice(string url, string @namespace, string classname,
string methodname, object[] args) {
try
{
System.Net.WebClient wc = new System.Net.WebClient();
System.IO.Stream stream = wc.OpenRead(url+"?WSDL");
System.Web.Services.Description.ServiceDescription sd =
System.Web.Services.Description.ServiceDescription.Read(stream);
System.Web.Services.Description.ServiceDescriptionImporter sdi =
new System.Web.Services.Description.ServiceDescriptionImporter();
sdi.AddServiceDescription(sd,"","");
System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);
System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn,ccu);
Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();
System.CodeDom.Compiler.CompilerParameters cplist =
new System.CodeDom.Compiler.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");
System.CodeDom.Compiler.CompilerResults cr = icc.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());
}
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);
}
catch(Exception ex)
{
throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));
}
}
分享到:
相关推荐
C# _.NET_动态调用webservice的三种方式 在本文中,我们将讨论如何动态调用WebService的三种方式。在某些情况下,我们可能需要在程序运行期间动态调用一个未知的服务。这可以通过使用.NET Framework的System.Web....
本文将深入探讨如何在C#中实现动态调用WebService服务,主要涉及"反射"和"动态调用"这两个核心概念。 首先,我们要理解什么是WebService。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的,可以在不同操作...
### C#.NET 动态调用WebService的三种方式详解 #### 概述 在日常的.NET开发工作中,我们经常需要与远程服务器上的服务进行交互,其中WebService作为一种常见的服务交互方式被广泛采用。多数情况下,我们会选择通过...
动态调用Webservice是指在运行时根据需要创建并执行Web服务的方法,无需预先编译或硬编码调用的详细信息。这种灵活性允许开发者在不完全了解服务接口的情况下使用服务,只需知道服务的URL和WSDL(Web服务描述语言)...
在.NET框架中,动态调用WebService是一项常见的任务,它允许开发者在运行时根据需要与Web服务进行交互,而无需在编译时明确指定服务接口。这通常涉及到使用System.Web.Services.ProtocolsSoapHttpClientProtocol类...
ASP.NET动态调用WebService是一种灵活的方法,允许程序员在运行时根据需要改变WebService的URL,而无需重新编译或修改应用程序的源代码。这种技术在多种场景下非常有用,例如,当WebService服务端需要进行更新、迁移...
在C#编程中,动态调用WebService是一种高级技巧,它允许你在运行时根据需要调用不同的Web服务,而不需要在编译时就确定具体的URL或方法。这种灵活性尤其有用,当你需要处理Web服务URL变动或者需要动态选择服务时。...
【标题】"动态调用webservice(完整可运行)"涉及的核心知识点主要集中在Web服务的动态调用上,这是在分布式系统中实现不同应用间通信的一种常见方式。Web服务(Web Service)是一种基于开放标准(如XML、SOAP、WSDL...
最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!
本文将深入探讨如何使用Axis2来动态地调用Web Service,并通过分析`WebServiceInvoker.java`这个文件来理解其实现原理。 1. **Java动态调用Web Service**: 在Java中,动态调用Web Service主要涉及到JAX-WS(Java ...
本篇文章将详细讲解如何在C++中调用WebService,包括静态和动态方式,并探讨相关的源码实现。 首先,让我们理解什么是WebService。WebService是一种基于XML的开放标准,允许不同平台和应用程序之间进行互操作。它...
动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...
描述中提到的“搭建iis网站,通过webservice动态指定网址”,意味着我们将创建一个IIS站点,并在这个站点上发布我们的WebService。IIS是微软提供的一款强大的Web服务器,它可以托管各种Web应用程序,包括WebService...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而动态调用Web服务和复杂对象的序列化、反序列化是开发过程中常见的技术环节。本文将深入探讨这两个主题。 首先,让我们理解什么是动态调用Web服务。Web...
动态调用Web Service是编程中一个关键的概念,它允许程序在运行时根据需要选择和调用不同的Web Service,而不是在编译时就固定下来。这种灵活性对于构建可扩展和可维护的系统至关重要。 Web Service通常基于SOAP...
通过映射实现动态调用webService,写个url,方法名就直接调用,不需要在添加引用了,好处大家都明白 不过映射的方法(类里面)虽然能用 但是是过时的。 在vs2008下打开此工程可以看到提示的 大家有兴趣自己改吧 反正也...
在IT行业中,动态调用WebService和反射是两个关键的技术概念,它们在开发高效、灵活的应用程序时发挥着重要作用。本文将深入探讨这两个概念,并结合反射缓存可反射类型的使用,来解析如何在实际项目中提高性能。 ...
【C#动态调用WebService】 在C#编程中,动态调用WebService是一种常见的需求,它允许程序在运行时根据需要创建并调用WebService接口,而无需预先编译固定的引用。这种方式提高了程序的灵活性,特别是在服务地址或...
动态调用WebService是一种灵活的方法,允许开发者无需事先知道服务的具体实现细节就能与远程服务进行交互。这种方法特别适用于那些需要在不同技术栈之间进行通信的场景,例如.NET与Java环境之间的互操作。以下是从...