因项目需求,需要调用多个webservice,因此不能使用服务引用,在网上找到一个动态调用的代码,测试可用,在此保留,以便日后再次使用
/// 根据指定的信息,调用远程WebService方法
/// </summary>
/// <param name="url">WebService的http形式的地址</param>
/// <param name="nameSpace">欲调用的WebService的命名空间</param>
/// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param>
/// <param name="methodname">欲调用的WebService的方法名</param>
/// <param name="args">参数列表</param>
/// <returns>WebService的执行结果</returns>
private object InvokeWebservice(string url, string nameSpace, string classname, string methodname, object[] args)
{
try
{
//1.使用WebClient 下载WSDL信息
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url + "?WSDL");
//2.创建和格式化WSDL文档
ServiceDescription srvDesc = ServiceDescription.Read(stream);
//3. 创建客户端代理代理类
ServiceDescriptionImporter srvDescInporter = new ServiceDescriptionImporter();
srvDescInporter.ProtocolName = "Soap";//指定访问协议
srvDescInporter.Style = ServiceDescriptionImportStyle.Client;//生成客户端代理,默认。
srvDescInporter.AddServiceDescription(srvDesc, "", ""); //添加WSDL文档。
//4 .使用 CodeDom 编译客户端代理类。
CodeNamespace codeNamespce = new CodeNamespace(nameSpace);
CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
codeCompileUnit.Namespaces.Add(codeNamespce);
srvDescInporter.Import(codeNamespce, codeCompileUnit);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
//表示用于调用编译器的参数。
System.CodeDom.Compiler.CompilerParameters parameter = new System.CodeDom.Compiler.CompilerParameters();
parameter.GenerateExecutable = false; //设置是否生成可执行文件。
parameter.GenerateInMemory = true; //设置是否在内存中生成输出。
parameter.ReferencedAssemblies.Add("System.dll"); //ReferencedAssemblies 获取当前项目所引用的程序集。
parameter.ReferencedAssemblies.Add("System.XML.dll");
parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
parameter.ReferencedAssemblies.Add("System.Data.dll");
//获取从编译器返回的编译结果。
System.CodeDom.Compiler.CompilerResults cr = provider.CompileAssemblyFromDom(parameter, codeCompileUnit);
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)
{
return ex.Message;
}
}
分享到:
相关推荐
本文将深入探讨如何在C#中实现动态调用WebService服务,主要涉及"反射"和"动态调用"这两个核心概念。 首先,我们要理解什么是WebService。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的,可以在不同操作...
C# _.NET_动态调用webservice的三种方式 在本文中,我们将讨论如何动态调用WebService的三种方式。在某些情况下,我们可能需要在程序运行期间动态调用一个未知的服务。这可以通过使用.NET Framework的System.Web....
【C#动态调用WebService】 在C#编程中,动态调用WebService是一种常见的需求,它允许程序在运行时根据需要创建并调用WebService接口,而无需预先编译固定的引用。这种方式提高了程序的灵活性,特别是在服务地址或...
### C#.NET 动态调用WebService的三种方式详解 #### 概述 在日常的.NET开发工作中,我们经常需要与远程服务器上的服务进行交互,其中WebService作为一种常见的服务交互方式被广泛采用。多数情况下,我们会选择通过...
C#动态调用webservice服务 先初始化类 WebServiceCall.WebServiceCall webservicecall1 = new WebServiceCall.WebServiceCall(); 然后调用方法 WebService()
动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...
本主题聚焦于如何使用C#动态地调用WebService,以实现反向代理功能,从而避免每次需要手动引入WebService的Web引用或URL。这是一种提高代码可维护性和灵活性的方法。 在传统的C# WebService调用中,我们通常会通过...
【C# 动态调用WebService的示例】 在C#编程中,有时我们需要在运行时动态地调用Web服务,而不是在编译时硬编码服务的引用。这通常是由于服务地址可能变化、服务接口可能更新或者需要在不明确具体服务细节的情况下...
C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice
在本教程中,我们将深入探讨如何在Visual Studio 2010(VS2010)环境下,使用C#动态地调用Web服务。Web服务通常基于SOAP协议,允许不同平台的应用之间进行数据交换,而动态调用则意味着在运行时而非编译时确定要调用...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而动态调用Web服务和复杂对象的序列化、反序列化是开发过程中常见的技术环节。本文将深入探讨这两个主题。 首先,让我们理解什么是动态调用Web服务。Web...
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
在深入了解如何使用`HttpWebRequest`调用WebService之前,我们先简要回顾一下相关的基础知识。 ##### 1.1 WebService简介 WebService是一种基于XML和HTTP协议的应用程序接口(API),它允许不同平台、不同语言编写的...
4. **调用WebService**:在.NET环境中,可以通过`System.Web.Services.Protocols.SoapHttpClientProtocol`类或者更简单的Web Reference(在.NET Framework 4.0之后被WCF取代)来调用WebService。这里提到的`Ajax....
客户端调用服务器WebService接口可以更加快速。
本篇文章将深入探讨如何在C#中静态调用Web Service,以便通过Web Service来访问数据库。Web Service是一种基于互联网的软件服务,允许不同系统间的应用程序进行交互。在描述的场景中,我们构建了一个IIS(Internet ...
本示例中,我们将探讨如何利用C#调用WebService来获取天气预报信息。这个过程涉及到网络通信、XML数据解析以及对第三方API的集成。 首先,我们需要理解WebService的工作原理。WebService是一种基于HTTP协议的远程...
方法一: 代码如下:Hashtable ht = new Hashtable(); ht.Add(“a”, “testhelloworld”); XmlDocument xx = WebServicesHelper.QuerySoapWebService(... string ss = xx.OuterXml; 代码如下:/// /// 通用WebSer
WebService动态调取 通用的一个方法。可以集成到所有的平台。精品推荐。适合所有的编码返回格式,谢谢C#程序员的关注