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

C#靜態調用帶有SoapHeader驗證的WebServices

lan ext this main方法 服務器 blank 提示 log avi

轉自:http://blog.csdn.net/u012995964/article/details/54562111

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

WebServices服務創建

Visual Studio 2013中創建WebServices

  1. 創建一個空的 ASP.NET Web 應用程序
  2. 技術分享
  3. 創建 WebService 服務的程序(asmx格式)文件:
  4. 技術分享
  5. 首次右鍵“添加”時,看不到圖中所示的 “Web 服務(ASMX)” ,可以點擊“新建項(W)”來實現創建:

  6. 技術分享
    技術分享

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

    技術分享

    1. 快捷鍵 F5ctrl + F5 運行程序如下:

    技術分享
    此時可以點擊頁面的 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的調用

創建客戶端

創建控制臺應用程序,用來調用測試。
技術分享

技術分享

添加引用

新建完項目後,需要引用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學習,可以看這裏:

  • w3school 提供的系列教程
  • MSDN的ASP.NET XML Web services 基礎知識

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

C#靜態調用帶有SoapHeader驗證的WebServices