`
lin358
  • 浏览: 64008 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

C#动态调用webservice

    博客分类:
  • C#
阅读更多
因项目需求,需要调用多个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#_.NET_动态调用webservice的三种方式

    C# _.NET_动态调用webservice的三种方式 在本文中,我们将讨论如何动态调用WebService的三种方式。在某些情况下,我们可能需要在程序运行期间动态调用一个未知的服务。这可以通过使用.NET Framework的System.Web....

    C#动态调用WebService服务

    本文将深入探讨如何在C#中实现动态调用WebService服务,主要涉及"反射"和"动态调用"这两个核心概念。 首先,我们要理解什么是WebService。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的,可以在不同操作...

    C#动态调用WebService.pdf

    【C#动态调用WebService】 在C#编程中,动态调用WebService是一种常见的需求,它允许程序在运行时根据需要创建并调用WebService接口,而无需预先编译固定的引用。这种方式提高了程序的灵活性,特别是在服务地址或...

    C#.NET_动态调用webservice的三种方式

    ### C#.NET 动态调用WebService的三种方式详解 #### 概述 在日常的.NET开发工作中,我们经常需要与远程服务器上的服务进行交互,其中WebService作为一种常见的服务交互方式被广泛采用。多数情况下,我们会选择通过...

    C#动态调用webservice服务

    C#动态调用webservice服务 先初始化类 WebServiceCall.WebServiceCall webservicecall1 = new WebServiceCall.WebServiceCall(); 然后调用方法 WebService()

    C# 动态调用WebService服务

    动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...

    C#动态调用webservice.rar

    本主题聚焦于如何使用C#动态地调用WebService,以实现反向代理功能,从而避免每次需要手动引入WebService的Web引用或URL。这是一种提高代码可维护性和灵活性的方法。 在传统的C# WebService调用中,我们通常会通过...

    C# 动态调用WebService的示例

    【C# 动态调用WebService的示例】 在C#编程中,有时我们需要在运行时动态地调用Web服务,而不是在编译时硬编码服务的引用。这通常是由于服务地址可能变化、服务接口可能更新或者需要在不明确具体服务细节的情况下...

    C# webservice 服务调用工具类,源码

    C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice

    C#动态调用webservice(VS2010)

    在本教程中,我们将深入探讨如何在Visual Studio 2010(VS2010)环境下,使用C#动态地调用Web服务。Web服务通常基于SOAP协议,允许不同平台的应用之间进行数据交换,而动态调用则意味着在运行时而非编译时确定要调用...

    动态调用webservice与复杂对象的序列化

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而动态调用Web服务和复杂对象的序列化、反序列化是开发过程中常见的技术环节。本文将深入探讨这两个主题。 首先,让我们理解什么是动态调用Web服务。Web...

    c# httpwebrequest调用webservice demo

    在深入了解如何使用`HttpWebRequest`调用WebService之前,我们先简要回顾一下相关的基础知识。 ##### 1.1 WebService简介 WebService是一种基于XML和HTTP协议的应用程序接口(API),它允许不同平台、不同语言编写的...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    调用webservice,通过post传参读取返回的XML

    4. **调用WebService**:在.NET环境中,可以通过`System.Web.Services.Protocols.SoapHttpClientProtocol`类或者更简单的Web Reference(在.NET Framework 4.0之后被WCF取代)来调用WebService。这里提到的`Ajax....

    C#提高webService接口调用的性能

    客户端调用服务器WebService接口可以更加快速。

    C#静态调用webservice

    本篇文章将深入探讨如何在C#中静态调用Web Service,以便通过Web Service来访问数据库。Web Service是一种基于互联网的软件服务,允许不同系统间的应用程序进行交互。在描述的场景中,我们构建了一个IIS(Internet ...

    c#动态调用Webservice的两种方法实例

    方法一: 代码如下:Hashtable ht = new Hashtable(); ht.Add(“a”, “testhelloworld”); XmlDocument xx = WebServicesHelper.QuerySoapWebService(... string ss = xx.OuterXml; 代码如下:///  /// 通用WebSer

    C#写winform调用webservice例子(经典)

    在本文中,我们将深入探讨如何使用C#语言在Windows Forms(WinForm)应用程序中调用Web服务,以实现一个经典的示例:获取互联网上的天气预报信息。这个例子适合于使用Visual Studio 2005或2008开发环境。 首先,让...

    C#调用WebService实现天气预报

    本示例中,我们将探讨如何利用C#调用WebService来获取天气预报信息。这个过程涉及到网络通信、XML数据解析以及对第三方API的集成。 首先,我们需要理解WebService的工作原理。WebService是一种基于HTTP协议的远程...

Global site tag (gtag.js) - Google Analytics