NET动态调用WebService

NET动态调用WebService

这不是一篇教你了解WebService的博文,也不是对WebService的深入理解, 这是一篇教你在开发过程中,如果动态的调用WebService一个方法.

在比较常见的WebService调用,我们一般是选择在项目中,新建添加引用的方式来引用WebService服务. 例如下面的方式  : 

1 : 在项目中新建添加服务引用

2 : 输入引用服务器的地址

然后我们的程序集下就会多出刚才新建的Service 引用相关的文件引用.

然后我们就可以直接在代码中调用ServiceReference1 , 就可以了,在这里就不在继续的详细做解释说明了,我们还是回到主题,如何减去这些步骤,因为这样的方式添加引用,1 : 不好扩展, 2 : 比较繁琐

下面介绍一种方式用来动态的调用WebService References :

一 : 在项目中右键选择新建

然后我们修改Component类本部.

我们添加完成之后,Component类内部默认为:

 1   public partial class Component1 : Component
 2     {
 3         public Component1()
 4         {
 5             InitializeComponent();
 6         }
 7
 8         public Component1(IContainer container)
 9         {
10             container .Add(this );
11
12             InitializeComponent();
13         }
14     }

在此我们需要做一些修改.

首先在项目中添加WebService的引用.

然后将Component类 继承自 SoapHttpClientProtocol

至此将Component类改为 :

 1  [ WebServiceBinding (Namespace = "http://tempuri.org/" )]
 2     public class Component1 : SoapHttpClientProtocol
 3     {
 4         public Component1()
 5         {
 6             InitializeComponent();
 7         }
 8
 9         public Component1(IContainer container)
10         {
11             container . Add(this );
12
13             InitializeComponent();
14         }
15     }

SoapHttpClientProtocol SoapHttpClientProtocol类可以直接访问指定的webService的指定方法

若要与 XML Web services 通信,请为要调用的 XML Web services 创建一个间接或直接从 WebClientProtocol 派生的代理类。 可以不用手动创建代理类,而使用 Web 服务描述语言工具 (Wsdl.exe) 为给定 XML Web services 的服务说明创建代理类。 当为 SOAP 协议生成代理类时,对 XML Web services 方法的同步调用通过 Invoke 方法进行,而异步调用通过BeginInvoke 方法和 EndInvoke 方法进行。

然后在配置文件中写入我们所要引用的服务器链接地址 :

1 <add key="ServiceAddress" value="http://localhost:7340/CourseMakerService.asmx" />

在我们添加的Conponent Class 构造中调用服务器链接地址

1  public Component1( string serviceUrl)
2  {
3        if (serviceUrl. Equals( "UpdateServiceAddress" ))
4           base .Url = ConfigurationManager . AppSettings["UpdateServiceAddress" ];
5       else
6           base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
7   }

然后当我们想要调用WebService中的方法时,只需要在Component1类中写. 如果我的调用方式

 1 [ WebServiceBinding(Namespace = "http://tempuri.org/" )]
 2     public class OffLineLearingClient : SoapHttpClientProtocol
 3     {
 4         public OffLineLearingClient( string serviceUrl)
 5         {
 6             if (serviceUrl. Equals( "UpdateServiceAddress" ))
 7                 base .Url = ConfigurationManager . AppSettings["UpdateServiceAddress" ];
 8             else
 9                 base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
10         }
11         public OffLineLearingClient()
12         {
13             base .Url = ConfigurationManager . AppSettings["ServiceAddress" ];
14         }
15         [ SoapDocumentMethod ]
16         public YHBJUser GetUser( YHBJUser user)
17         {
18             return base . Invoke("GetUser" , new object [] { user })[0 ] as YHBJUser ;
19         }
20
21         [ SoapDocumentMethod ]
22         public List < YHBJClass> GetTrainings11( string userId)
23         {
24             return base . Invoke("GetTrainings11" , new object [] { userId })[0 ] as List <YHBJClass > ;
25         }

这样我们就可以动态的实现如果调用WebService了.

时间: 2024-11-09 06:15:22

NET动态调用WebService的相关文章

C# 动态调用WebService

Reference from : http://blog.csdn.net/chuxiamuxiang/article/details/5731988 在C#程序中,若要调用WebService,一般是采用"添加Web引用"的方式来实现的.但如果此WebService的URL是在程序运行过程中才能获得的,那怎么办呢?那就必须是"动态"调用这个WebService了. 网上有不少关于这方面的例子,总结了一下,主要有两种:(1)每次都动态调用,(2)将WebServic

动态调用webservice

public static class WebserviceHelper { /// <summary> /// 动态调用WebService /// </summary> /// <param name="url">WebService地址</param> /// <param name="methodname">方法名(模块名)</param> /// <param name=&quo

[转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行.我无意中通过百度搜索找了一个采用GET/POST/SOAP方式动态调用WebService的

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

前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 RESTful 架构风格的.但到目前为止,WebService 在一些Public Institution 中使用还是十分广泛的. 这里主要讨论一下关于WebService的调用问题.关于WebService 的调用分为静态调用和动态调用两种,外加直接Http请求方式 静态调用 静态调用的方式是通过“Add

C# 动态调用 WebService (转)

通常我们在程序中需要调用WebService时,都是通过"添加Web引用",让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名.参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制.如果哪一天发布Web服务的URL改变了,则我们需要重新让VS.NET生成代理,并重新编译.在某些情况下,这可能是不能忍受的,我们需要动态调用WebService的能力.比如我们可以把Web服务的URL保存在配置文件中,

动态调用WebService时动态获取返回Class中的属性

直接给代码: var ret = HTTPS.WSHelper.InvokeWebService("WebService URL", "MethodName", object[] args);var type = ret.GetType();var propertyinfo = type.GetProperty("result");if (propertyinfo == null){       throw new Exception("

不添加引用,动态调用WebService

这两天给公司写一个调用接口的程序,接口采用WebService! 本打算将这个工具写成通用的,但是微软给出的调用WebService的方法必须添加该WebService引用,这样的方式不免太过于死板,无法动态调用,于是在网上查了很多相关解决办法!自己封装成了一个函数,发布出来,做个纪念! using System.Net; using System.IO; using System.Web.Services.Description; using System.CodeDom; using Sys

C#中Winform动态调用Webservice的方法(转)

一般情况下winform调用webservice时步骤 1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用 让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务. 如果需要动态调用WebService,要实现这样的功能: publicstaticobjectInvokeWebService(stringurl,  stringmethodname,object[] args) 其中,url是Web服务的地址,me

Web Service学习笔记:动态调用WebService

原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务.在 .NET Framework 的 System.Web.Services.Description 命名空间中有我们需要的东西. 具体步骤: 1. 从目标 URL 下载 WSDL 数据. 2. 使用 ServiceDescription 创建和格式化 WSDL

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

转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W4iPZcjAW6q8vu45QOjK6DSUon1R10ePVlqG6nwussbbXE6jm 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务.在 .NET Framework