Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
2006-11-02 01:34
465 查看
这里我们将稍微改变在《Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务》中建立的WebService,为了能让大家有所对比,我们将改变前后的代码都给出来。
先前建立的WebService如下:
1using System;
2using System.Web;
3using System.Web.Services;
4using System.Web.Services.Protocols;
5
6[WebService(Namespace = "http://tempuri.org/")]
7[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
8public class MyServiceClass : System.Web.Services.WebService
9
而改变后的代码:
1using System;
2using System.Web;
3using System.Web.Services;
4using System.Web.Services.Protocols;
5
6public class MyServiceClassHeader : SoapHeader
7[WebService(Namespace = "http://tempuri.org/")]
12[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
13public class MyServiceClass : System.Web.Services.WebService
14using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace WindowsPro
10
为了适合更改后的MyServiceClass,这个代码将改变为(首先要右击名为MyServ的代理类,选择“更新Web引用”):
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace WindowsPro
10MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
2MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
3MyHeader.UsN = this.tB_UserName.Text;
4MyHeader.PaW = this.tB_PassWord.Text;
5MyHeader.MustUnderstand = true;
6MyWebServ.MyServiceClassHeaderValue = MyHeader;
7string LoginOK = MyWebServ.Login();
8MessageBox.Show(LoginOK);
首先我们要实例化WebService的SoapHeader类(第1行),然后给这个WebService的SoapHeader类中的各个成员赋值(第3行和第4行),第5行是说这个SoapHeader是否让WebService中的某个方法必须处理的(大家可以把值改为false运行后测试一下看看返回什么提示框),最关键的一句话是写使用SoapHeader必不可少的就是第6行,这句话是将这个实例化的SoapHeader具体绑定到一个WebService的某个类调用上,当调用绑定后的这个类时,就会在由代理类生成的Soap消息中将这个SoapHeader生成进去。之后就是我们前面介绍的调用WebService中的方法和显示返回值(第7行和第8行)。
这里还必须要说明的是一定要实例化SoapHeader,绝对不能在调用WebService的某个方法之后才给SoapHeader各个成员赋值,在调用之前至于是先绑定还是先赋值均可。下面是错误的编写顺序:
1MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
2MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
3
4MyHeader.MustUnderstand = true;
5
6MyWebServ.MyServiceClassHeaderValue = MyHeader;
7
8string LoginOK = MyWebServ.Login();
9MyHeader.UsN = this.tB_UserName.Text;//错误位置
10MyHeader.PaW = this.tB_PassWord.Text;//错误位置
11MessageBox.Show(LoginOK);
第9行和第10行代码位置就是错了,不可能方法都从WebService执行完了才给SoapHeader各个成员赋值。而第9行和第10行的代码插入到第3行、第5行或者第7行,整个程序都是对的,你们说说对吗?(留给大家自己想原因吧,呵呵……)下一篇随笔我们就要建立一个Access数据库的用户表来做用户登录的验证了,请博友们继续关注吧。
总结:我们这次主要讲解的是使用Web Services的SoapHeader来做登录验证,你也可以将一个用户的个人信息和状态都放在这个SoapHeader中,但是提醒博友们一定要注意的是这个改变后的MyServiceClass中的每个细节的变化,每个不同的地方,千万千万不要大意,更不能忽视不看和马虎写写哦
先前建立的WebService如下:
1using System;
2using System.Web;
3using System.Web.Services;
4using System.Web.Services.Protocols;
5
6[WebService(Namespace = "http://tempuri.org/")]
7[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
8public class MyServiceClass : System.Web.Services.WebService
9
而改变后的代码:
1using System;
2using System.Web;
3using System.Web.Services;
4using System.Web.Services.Protocols;
5
6public class MyServiceClassHeader : SoapHeader
7[WebService(Namespace = "http://tempuri.org/")]
12[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
13public class MyServiceClass : System.Web.Services.WebService
14using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace WindowsPro
10
为了适合更改后的MyServiceClass,这个代码将改变为(首先要右击名为MyServ的代理类,选择“更新Web引用”):
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace WindowsPro
10MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
2MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
3MyHeader.UsN = this.tB_UserName.Text;
4MyHeader.PaW = this.tB_PassWord.Text;
5MyHeader.MustUnderstand = true;
6MyWebServ.MyServiceClassHeaderValue = MyHeader;
7string LoginOK = MyWebServ.Login();
8MessageBox.Show(LoginOK);
首先我们要实例化WebService的SoapHeader类(第1行),然后给这个WebService的SoapHeader类中的各个成员赋值(第3行和第4行),第5行是说这个SoapHeader是否让WebService中的某个方法必须处理的(大家可以把值改为false运行后测试一下看看返回什么提示框),最关键的一句话是写使用SoapHeader必不可少的就是第6行,这句话是将这个实例化的SoapHeader具体绑定到一个WebService的某个类调用上,当调用绑定后的这个类时,就会在由代理类生成的Soap消息中将这个SoapHeader生成进去。之后就是我们前面介绍的调用WebService中的方法和显示返回值(第7行和第8行)。
这里还必须要说明的是一定要实例化SoapHeader,绝对不能在调用WebService的某个方法之后才给SoapHeader各个成员赋值,在调用之前至于是先绑定还是先赋值均可。下面是错误的编写顺序:
1MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
2MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
3
4MyHeader.MustUnderstand = true;
5
6MyWebServ.MyServiceClassHeaderValue = MyHeader;
7
8string LoginOK = MyWebServ.Login();
9MyHeader.UsN = this.tB_UserName.Text;//错误位置
10MyHeader.PaW = this.tB_PassWord.Text;//错误位置
11MessageBox.Show(LoginOK);
第9行和第10行代码位置就是错了,不可能方法都从WebService执行完了才给SoapHeader各个成员赋值。而第9行和第10行的代码插入到第3行、第5行或者第7行,整个程序都是对的,你们说说对吗?(留给大家自己想原因吧,呵呵……)下一篇随笔我们就要建立一个Access数据库的用户表来做用户登录的验证了,请博友们继续关注吧。
总结:我们这次主要讲解的是使用Web Services的SoapHeader来做登录验证,你也可以将一个用户的个人信息和状态都放在这个SoapHeader中,但是提醒博友们一定要注意的是这个改变后的MyServiceClass中的每个细节的变化,每个不同的地方,千万千万不要大意,更不能忽视不看和马虎写写哦
相关文章推荐
- Web服务初探:用Demo学Web服务系列(3)——用C/S程序调用Web服务
- Web服务初探:用Demo学Web服务系列(9)——用B/S程序调用Web服务
- Web服务初探:用Demo学Web服务系列(1)——写在学前的话
- Web服务初探:用Demo学Web服务系列——Web服务中Soap消息的相关知识
- Web服务初探:用Demo学Web服务系列(8)——Web服务中Soap消息的相关知识
- Web服务初探:用Demo学Web服务系列(7)——XML的相关知识
- Web服务初探:用Demo学Web服务系列(6)——断开模式访问数据库的Web服务
- Web服务初探:用Demo学Web服务系列(5)——连接模式访问数据库的Web服务
- Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务
- Web服务系列教学-如何调用WebService(5)
- [WS]Web服务系列(二) Web服务的结构
- [WS]Web服务系列(二) Web服务的结构
- 37:ASP.NET复习系列- web服务-ASP.NET中的Web服务(二)
- 36:ASP.NET复习系列- web服务-ASP.NET中的Web服务(一)
- 38:ASP.NET复习系列-web服务-ASP.NET中的Web服务(三)
- WF工作流与Web服务的相互调用 —— 以InvokeWebServiceActivity在Workflow工作流调用Web服务
- python笔记系列:探测web服务质量方法:pycurl
- axis2 客户端调用wss4j 安全web服务的方法
- web层直接调用 dubbo的服务,合适吗?
- 经典技术文章转载:如何利用 SSL 调用 Web 服务