且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务

更新时间:2022-09-15 13:38:07

 这里我们将稍微改变在《Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务》中建立的WebService,为了能让大家有所对比,我们将改变前后的代码都给出来。
先前建立的WebService如下:
 1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System;
 2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web;
 3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web.Services;
 4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web.Services.Protocols;
 5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务[WebService(Namespace = "http://tempuri.org/")]
 7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务public class MyServiceClass : System.Web.Services.WebService
 9Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务{
10Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   public MyServiceClass()
11Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   {
12Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      //如果使用设计的组件,请取消注释以下行 
13Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      //InitializeComponent(); 
14Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   }

15Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
16Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   [WebMethod]
17Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   public bool Login(string UserName,string PassWord)
18Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   {
19Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      if (UserName == "Micky" && PassWord == "micky0")
20Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      {
21Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务         return true;
22Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      }

23Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      else
24Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      {
25Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务         return false;
26Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      }

27Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   }
    
28Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务}

29Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务

而改变后的代码:

 1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System;
 2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web;
 3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web.Services;
 4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Web.Services.Protocols;
 5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务public class MyServiceClassHeader : SoapHeader
 7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务{
 8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public string UsN;
 9Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public string PaW;
10Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务}

11Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务[WebService(Namespace = "http://tempuri.org/")]
12Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
13Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务public class MyServiceClass : System.Web.Services.WebService
14Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务{
15Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public MyServiceClass()
16Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    {
17Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
18Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        //如果使用设计的组件,请取消注释以下行 
19Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        //InitializeComponent(); 
20Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    }

21Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
22Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public MyServiceClassHeader MSCH;
23Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
24Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    [WebMethod]
25Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    [SoapHeader("MSCH",Direction = SoapHeaderDirection.In)]
26Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public string Login()
27Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    {
28Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        if (MSCH != null)
29Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        {
30Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            if (MSCH.MustUnderstand)
31Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            {
32Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                string UserName = MSCH.UsN;
33Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                string PassWord = MSCH.PaW;
34Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                if (UserName == "Micky" && PassWord == "micky0")
35Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                {
36Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                    return "登录成功!";
37Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                }

38Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                else
39Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                {
40Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                    return "登录错误!";
41Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                }

42Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            }

43Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            else
44Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            {
45Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                return "消息头不是必懂的!";
46Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            }

47Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        }

48Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        else
49Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        {
50Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            return "无头消息!";
51Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        }

52Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    }

53Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务}

    大家可以看出来,我们使用了一个新的类MyServiceClassHeader,而这个新类继承自SoapHeader这个。在这个MyServiceClassHeader中我们定义了两个公共变量UsNPaW,分别来存储用户名和密码。为了能帮助大家理解,我们简要的说明一下SoapHeader的用途,在Soap消息中可以包含一个消息的头,可以在这里添加并传递一些如用户名和密码等类似的简单数据,我们将在《系列》的后面介绍Soap消息的结构。在Login方法中还要多定义一个属性[SoapHeader("MSCH",Direction = SoapHeaderDirection.In)],这样我们就从消息头中取出了用户名和密码做验证并返回一个验证结果。(如果对其中的SoapHeader定义使用有什么问题请在评论中提出。)
    
在看C/S程序前,请运行编译一下我们改变后的MyServiceClass的这个Web服务。下面我们来看看在《Web服务初探:用Demo学Web服务系列(3)——用C/S程序调用Web服务》中的C/S程序中是如何再调用这个改变后的MyServiceClass。仍然用原来的代码和更改后的代码进行对比。
首先看原先的窗体代码:

 1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System;
 2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Collections.Generic;
 3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.ComponentModel;
 4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Data;
 5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Drawing;
 6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Text;
 7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Windows.Forms;
 8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务 
 9Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务namespace WindowsPro
10Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务{
11Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public partial class Login : Form
12Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    {
13Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务       public Login()
14Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务       {
15Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务           InitializeComponent();
16Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务       }

17Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
18Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务       private void Btn_Login_Click(object sender, EventArgs e)
19Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务       {
20Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
21Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);
22Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          if (LoginOK)
23Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          {
24Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务              MessageBox.Show("用户名和密码正确!");
25Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          }

26Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          else
27Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          {
28Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务              MessageBox.Show("用户名和密码错误!");
29Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务          }

30Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      }

31Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
32Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      private void Btn_Close_Click(object sender, EventArgs e)
33Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      {
34Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务         this.Close();
35Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务      }

36Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务   }

37Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务}

38Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务

为了适合更改后的MyServiceClass,这个代码将改变为(首先要右击名为MyServ的代理类,选择更新Web引用):

 1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System;
 2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Collections.Generic;
 3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.ComponentModel;
 4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Data;
 5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Drawing;
 6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Text;
 7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务using System.Windows.Forms;
 8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 9Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务namespace WindowsPro
10Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务{
11Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    public partial class Login : Form
12Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    {
13Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        public Login()
14Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        {
15Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            InitializeComponent();
16Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        }

17Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
18Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        private void Btn_Login_Click(object sender, EventArgs e)
19Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        {
20Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
21Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
22Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyHeader.UsN = this.tB_UserName.Text;
23Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyHeader.PaW = this.tB_PassWord.Text;
24Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyHeader.MustUnderstand = true;
25Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MyWebServ.MyServiceClassHeaderValue = MyHeader;
26Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            string LoginOK = MyWebServ.Login();
27Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            MessageBox.Show(LoginOK);
28Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            if (LoginOK == "登录成功!")
29Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            {
30Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务                ……
31Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            }

32Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        }

33Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
34Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        private void Btn_Close_Click(object sender, EventArgs e)
35Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        {
36Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务            this.Close();
37Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务        }

38Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务    }

39Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务}

为了帮助大家理解给调用的方法添加SoapHeader的过程,我们来分析其中几个比较关键的代码,如下:

1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.UsN = this.tB_UserName.Text;
4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.PaW = this.tB_PassWord.Text;
5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.MustUnderstand = true;
6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyWebServ.MyServiceClassHeaderValue = MyHeader;
7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务string LoginOK = MyWebServ.Login();
8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MessageBox.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各个成员赋值,在调用之前至于是先绑定还是先赋值均可。下面是错误的编写顺序:
 1Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();
 2Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
 3Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 4Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.MustUnderstand = true;
 5Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 6Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyWebServ.MyServiceClassHeaderValue = MyHeader;
 7Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务
 8Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务string LoginOK = MyWebServ.Login();
 9Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.UsN = this.tB_UserName.Text;//错误位置
10Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MyHeader.PaW = this.tB_PassWord.Text;//错误位置
11Web服务初探:用Demo学Web服务系列(4)——改变所调用的Web服务MessageBox.Show(LoginOK);

第9行和第10行代码位置就是错了,不可能方法都从WebService执行完了才给SoapHeader各个成员赋值。而第9行和第10行的代码插入到第3行、第5行或者第7行,整个程序都是对的,你们说说对吗?(留给大家自己想原因吧,呵呵……)下一篇随笔我们就要建立一个Access数据库的用户表来做用户登录的验证了,请博友们继续关注吧。



本文转自刚刚博客园博客,原文链接:http://www.cnblogs.com/lijigang/archive/2006/11/02/547406.html,如需转载请自行联系原作者