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了.

 

NET动态调用WebService的更多相关文章

  1. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

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

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

  3. 动态调用webservice(部分转载)

    动态调用webservice,做个笔记: public class WSHelper { /// < summary> /// 动态调用web服务 /// < /summary> ...

  4. C# 动态调用webservice

    最近项目中,用到动态调用webservice的内容,此处记录下来,留着以后COPY(我们只需要在XML,config文件,或者数据库中配置webservice连接地址和方法名即可使用): using ...

  5. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

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

    转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W ...

  7. WebService – 2.动态调用WebService

    在本节课程中,将演示如何通过程序动态添加.调用.编译.执行WebService并返回结果. WebService动态调用示意图 WebService相关知识 代码文档对象模型CodeDom的使用 编程 ...

  8. 用C#通过反射实现动态调用WebService 告别Web引用

    我们都知道,调用WebService可以在工程中对WebService地址进行WEB引用,但是这确实很不方便.我想能够利用配置文件灵活调用WebService.如何实现呢? 用C#通过反射实现动态调用 ...

  9. 动态调用Webservice 支持Soapheader身份验证(转)

    封装的WebserviceHelp类: using System; using System.CodeDom; using System.CodeDom.Compiler; using System. ...

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

    本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...

随机推荐

  1. C++实现堆排序

    堆排序是合并排序和插入排序排序方法共同的长处.它的时间复杂度O(nlgn),这也是一个地方排序算法:在任何时候,外阵中拥有唯一不变的输入数组存储的元素.引进第一家引进什么样的堆堆. 1.建堆:堆数据结 ...

  2. Streak OpenCart 商城自适应主题模板 ABC-0010

    兼容浏览器 IE9, Firefox, Safari, Opera, Chrome OpenCart版本号 OpenCart 1.5.x, OpenCart 1.5.6.x, OpenCart 1.5 ...

  3. log4net使用特定的解释

    说明:该程序演示如何使用log4net记录日志信息. log4net它是-known开源组件的日志记录功能.使用log4net可以很容易地将信息记录到文件.控制台.Windows事件日志和数据库(含有 ...

  4. JSON小结

    在 JSON 中,“Object” 是什么呢? json.org 有很好的解释: 1 .An object is an unordered set of name/value pairs. 2.An ...

  5. C#的WebBrowser控制浏览

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. Redis测井系统

    什么是 SLOWLOG Slow log 是 Redis 用来记录查询运行时间的日志系统. 查询运行时间指的是不包含像client响应(talking).发送回复等 IO 操作,而单单是运行一个查询命 ...

  7. MVC下判断用户登录和授权状态方法

    MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...

  8. java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layou

    于Activity调用它们的定义dialog事件ActionBarImpl can only be used with a compatible window decor layout异常, 解决方法 ...

  9. 它们的定义actionbar 并删除留空

    通过他们自己的定义actionbar布局变化actionbar样式,简单而美丽.但有一个细节需要注意的是,高分辨率的问题留空.一般720上述决议,下一次你发现,无论什么样的变化总是会有一个小的布局文件 ...

  10. Java String类的比较运算

    面试题:(多选)以下返回true的有() A. "beijing" == "beijing" B. "beijing".equals(new ...