C#靜態呼叫帶有SoapHeader驗證的WebServices
本文記錄帶有SoapHeader驗證的WebServices服務建立、部署及C#中的靜態呼叫方法,基於 Windows8.1
、Visual Studio 2013
、IIS8
環境實現。
WebServices服務建立
Visual Studio 2013中建立WebServices
- 建立一個空的
ASP.NET Web 應用程式
:
- 建立 WebService 服務的程式(asmx格式)檔案:
首次右鍵“新增”時,看不到圖中所示的 “Web 服務(ASMX)” ,可以點選“新建項(W)”來實現建立:
- 到此 WebService 服務建立完成,可以看到如下基礎程式碼:
- 快捷鍵
F5
或ctrl + 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服務的一些介紹比較,可以看這裡