天天看點

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

先前建立的WebService如下:

 1

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System;

 2

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Web;

 3

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Web.Services;

 4

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Web.Services.Protocols;

 5

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

 6

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

[WebService(Namespace = "http://tempuri.org/")]

 7

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

 8

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

public class MyServiceClass : System.Web.Services.WebService

 9

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

{

10

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   public MyServiceClass()

11

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   {

12

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      //如果使用設計的元件,請取消注釋以下行 

13

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      //InitializeComponent(); 

14

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   }

15

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

16

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   [WebMethod]

17

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   public bool Login(string UserName,string PassWord)

18

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

19

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      if (UserName == "Micky" && PassWord == "micky0")

20

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      {

21

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

         return true;

22

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      }

23

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      else

24

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

25

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

         return false;

26

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

27

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

   }    

28

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

}

29

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

而改變後的代碼:

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

public class MyServiceClassHeader : SoapHeader

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public string UsN;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public string PaW;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public MyServiceClass()

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    {

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        //如果使用設計的元件,請取消注釋以下行 

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        //InitializeComponent(); 

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    }

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public MyServiceClassHeader MSCH;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    [WebMethod]

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    [SoapHeader("MSCH",Direction = SoapHeaderDirection.In)]

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public string Login()

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        if (MSCH != null)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        {

30

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            if (MSCH.MustUnderstand)

31

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            {

32

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                string UserName = MSCH.UsN;

33

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                string PassWord = MSCH.PaW;

34

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                if (UserName == "Micky" && PassWord == "micky0")

35

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                {

36

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                    return "登入成功!";

37

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                }

38

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                else

39

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

40

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                    return "登入錯誤!";

41

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

42

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            }

43

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            else

44

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

45

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                return "消息頭不是必懂的!";

46

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

47

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        }

48

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        else

49

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

50

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            return "無頭消息!";

51

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

52

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

53

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    大家可以看出來,我們使用了一個新的類MyServiceClassHeader,而這個新類繼承自SoapHeader這個。在這個MyServiceClassHeader中我們定義了兩個公共變量UsN和PaW,分别來存儲使用者名和密碼。為了能幫助大家了解,我們簡要的說明一下SoapHeader的用途,在Soap消息中可以包含一個消息的頭,可以在這裡添加并傳遞一些如使用者名和密碼等類似的簡單資料,我們将在《系列》的後面介紹Soap消息的結構。在Login方法中還要多定義一個屬性[SoapHeader("MSCH",Direction = SoapHeaderDirection.In)],這樣我們就從消息頭中取出了使用者名和密碼做驗證并傳回一個驗證結果。(如果對其中的SoapHeader定義使用有什麼問題請在評論中提出。)

首先看原先的窗體代碼:

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Collections.Generic;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.ComponentModel;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Data;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Drawing;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Text;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

using System.Windows.Forms;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

namespace WindowsPro

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

    public partial class Login : Form

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

       public Login()

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

       {

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

           InitializeComponent();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

       }

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

       private void Btn_Login_Click(object sender, EventArgs e)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          if (LoginOK)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          {

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

              MessageBox.Show("使用者名和密碼正确!");

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          }

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

          else

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

              MessageBox.Show("使用者名和密碼錯誤!");

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

      private void Btn_Close_Click(object sender, EventArgs e)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

         this.Close();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

為了适合更改後的MyServiceClass,這個代碼将改變為(首先要右擊名為MyServ的代理類,選擇“更新Web引用”):

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        public Login()

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            InitializeComponent();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        private void Btn_Login_Click(object sender, EventArgs e)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyHeader.UsN = this.tB_UserName.Text;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyHeader.PaW = this.tB_PassWord.Text;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyHeader.MustUnderstand = true;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MyWebServ.MyServiceClassHeaderValue = MyHeader;

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            string LoginOK = MyWebServ.Login();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            MessageBox.Show(LoginOK);

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            if (LoginOK == "登入成功!")

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

                ……

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

        private void Btn_Close_Click(object sender, EventArgs e)

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

            this.Close();

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

為了幫助大家了解給調用的方法添加SoapHeader的過程,我們來分析其中幾個比較關鍵的代碼,如下:

1

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyServ.MyServiceClassHeader MyHeader = new MyServ.MyServiceClassHeader();

2

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();

3

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyHeader.UsN = this.tB_UserName.Text;

4

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyHeader.PaW = this.tB_PassWord.Text;

5

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyHeader.MustUnderstand = true;

6

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyWebServ.MyServiceClassHeaderValue = MyHeader;

7

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

string LoginOK = MyWebServ.Login();

8

Web服務初探:用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各個成員指派,在調用之前至于是先綁定還是先指派均可。下面是錯誤的編寫順序:

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務
Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyHeader.UsN = this.tB_UserName.Text;//錯誤位置

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

MyHeader.PaW = this.tB_PassWord.Text;//錯誤位置

Web服務初探:用Demo學Web服務系列(4)——改變所調用的Web服務

第9行和第10行代碼位置就是錯了,不可能方法都從WebService執行完了才給SoapHeader各個成員指派。而第9行和第10行的代碼插入到第3行、第5行或者第7行,整個程式都是對的,你們說說對嗎?(留給大家自己想原因吧,呵呵……)下一篇随筆我們就要建立一個Access資料庫的使用者表來做使用者登入的驗證了,請博友們繼續關注吧。

本文轉自剛剛部落格園部落格,原文連結:http://www.cnblogs.com/lijigang/archive/2006/11/02/547406.html,如需轉載請自行聯系原作者

繼續閱讀