1. 程式人生 > >C#靜態呼叫帶有SoapHeader驗證的WebServices

C#靜態呼叫帶有SoapHeader驗證的WebServices

本文記錄帶有SoapHeader驗證的WebServices服務建立、部署及C#中的靜態呼叫方法,基於 Windows8.1Visual Studio 2013IIS8 環境實現。


WebServices服務建立

Visual Studio 2013中建立WebServices

  1. 建立一個空的 ASP.NET Web 應用程式

新建空的Asp.net的web應用程式

  1. 建立 WebService 服務的程式(asmx格式)檔案:

新增服務程式檔案
首次右鍵“新增”時,看不到圖中所示的 “Web 服務(ASMX)” ,可以點選“新建項(W)”來實現建立:

建立ASMX檔案1
建立ASMX檔案2

  1. 到此 WebService 服務建立完成,可以看到如下基礎程式碼:

新建ASMX檔案內容

  1. 快捷鍵 F5ctrl + F5 執行程式如下:

VS的IIS Express中執行結果
此時可以點選頁面的 Hello World 跳轉到基於 HTTP POST 協議的呼叫測試頁面 :

服務測試

點選“呼叫”即可以在新的頁面看到返回的結果:

返回結果


新增SoapHeader驗證

建立基礎的WebService服務後,根據需要,有時服務會需要許可權來保證安全,這裡通過新增SoapHeader驗證(即Soap的頭資訊驗證)來實現。
1. 首先需要我們自己去實現一個有身份驗證資訊的類,這個類繼承於 System.Web.Services.Protocols.SoapHeader

, 程式碼如下:

    /// <summary>
    /// 自定義MySoapHeader類
    /// </summary>
    public class MySoapHeader : System.Web.Services.Protocols.SoapHeader {

        private string userName;
        private string passWord;

        public MySoapHeader() { }
        public MySoapHeader(string userName, string
passWord) { this.userName = userName; this.passWord = passWord; } public string UserName { set { userName = value; } get { return userName; } } public string PassWord { set { passWord = value; } get { return passWord; } } }

2.修改WebService類


    /// <summary>
    /// WebService1 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允許使用 ASP.NET AJAX 從指令碼中呼叫此 Web 服務,請取消註釋以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        public MySoapHeader soapHeader;

        [WebMethod(Description="SoapHeader驗證")]
        [System.Web.Services.Protocols.SoapHeader("soapHeader")]
        public string HelloWorld()
        {
            //簡單驗證使用者資訊
            //可以通過資料庫或其他方式驗證
            if ("admin".Equals(soapHeader.UserName) & "admin123".Equals(soapHeader.PassWord))
            {
                return "使用者驗證通過!";
            }
            else
            {
                return "對不起,您沒有訪問許可權!";
            }
        }
    }

至此實現了SoapHeader驗證的新增,此處注意Webservice類中的方法上新增上SoapHeader特性。即上面程式碼中的[System.Web.Services.Protocols.SoapHeader("soapHeader")]

此處為簡單實現,高階實現,可以參考MSDN提供的 教程文件


WebService服務部署

WebService服務程式的釋出

編寫好的web程式或者服務等,可以通過釋出直接部署到伺服器。這裡沒有遠端伺服器,所以使用本地的IIS伺服器來執行WebService服務。釋出方式如下:

服務釋出

自定義釋出目標配置檔案

釋出方法為檔案系統(即本地目錄)
後面兩項配置預設即可,此時點擊發布按鈕,等待控制檯顯示如下提示,即表示釋出成功:

釋出成功

此時可以在釋出的目錄中看到如下檔案:

目錄內容

本地IIS服務部署

在本地IIS的部署可以參看前文 Windows8.1中IIS服務安裝及站點配置 中站點部署的部分。

部署後瀏覽結果如下:

部署後瀏覽結果


WebService的呼叫

建立客戶端

建立控制檯應用程式,用來呼叫測試。
建立客戶端測試程式1

建立客戶端測試程式2

新增引用

新建完專案後,需要引用WebService服務,用於呼叫WebService

新增新增引用

新增服務引用

新增完引用後,開啟“Program.cs”檔案的Main方法中輸入以下語句:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestService
{
    class Program
    {
        static void Main(string[] args)
        {
            //建立WebService服務例項      
            MyWebServices.WebService1SoapClient service = new MyWebServices.WebService1SoapClient();
            //建立自定義SoapHeader物件例項
            MyWebServices.MySoapHeader header = new MyWebServices.MySoapHeader();

            //未設定SoapHeader的服務呼叫
            Console.WriteLine("未設定SoapHeader的服務呼叫:" + service.HelloWorld(header));
            Console.WriteLine();

            //將使用者名稱與密碼存入SoapHeader;
            header.UserName = "admin";
            header.PassWord = "admin123";

            ////設定SoapHeader的服務呼叫
            Console.WriteLine("未設定SoapHeader的服務呼叫:" + service.HelloWorld(header));

            Console.Read();
        }
    }
}

執行後,測試結果如下:

測試結果

原始碼: C#靜態呼叫帶有SoapHeader驗證的WebServices


參考及推薦

關於Web Services學習,可以看這裡:

關於IIS Express和本地IIS服務的一些介紹比較,可以看這裡