用WebService開發介面十分方便。但介面提供的數據不應是對所有人可見的,我們來利用SoapHeader寫一個簡單的身份驗證Demo 目錄 創建WebService項目(帶SoapHeader) 利用IIS發佈WebService 添加服務引用並利用SoapHeader驗證訪問介面的例子 一、創 ...
用WebService開發介面十分方便。但介面提供的數據不應是對所有人可見的,我們來利用SoapHeader寫一個簡單的身份驗證Demo
目錄
- 創建WebService項目(帶SoapHeader)
- 利用IIS發佈WebService
- 添加服務引用並利用SoapHeader驗證訪問介面的例子
一、創建WebService項目
以VisualStudio2010為例,創建ASP.NET空Web應用程式
在WSTest項目下添加類,命名為“SoapHeaderHelper”
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace WSTest 7 { 8 public class SoapHeaderHelper : System.Web.Services.Protocols.SoapHeader 9 { 10 private string username = string.Empty; 11 private string pwd = string.Empty; 12 13 public string UserName 14 { 15 get { return username; } 16 set { username = value; } 17 } 18 public string PWD 19 { 20 get { return pwd; } 21 set { pwd = value; } 22 } 23 public SoapHeaderHelper() 24 { } 25 public SoapHeaderHelper(string name, string password) 26 { 27 username = name; 28 pwd = password; 29 } 30 31 private bool IsValid(string nUserId, string nPassWord, out string nMsg) 32 { 33 nMsg = ""; 34 try 35 { 36 //此處從資料庫驗證授權信息 37 if (nUserId == "admin" && nPassWord == "admin") 38 { 39 40 return true; 41 } 42 else 43 { 44 nMsg = "對不起,您無權調用Web服務"; 45 return false; 46 } 47 } 48 catch 49 { 50 nMsg = "對不起,您無權調用Web服務"; 51 return false; 52 } 53 } 54 public bool IsValid(out string nMsg) 55 { 56 return IsValid(username, pwd, out nMsg); 57 } 58 } 59 }
在WSTest項目下新建項“Web服務”,尾碼為asmx
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.IO; 5 using System.Linq; 6 using System.Web; 7 using System.Web.Services; 8 using System.Runtime.Serialization; 9 using System.Text; 10 using System.Web.Services.Protocols; 11 using System.Xml; 12 13 namespace WSTest 14 { 15 16 /// <summary> 17 /// WebService1 的摘要說明 18 /// </summary> 19 [WebService(Namespace = "http://localhost/")] 20 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 21 [System.ComponentModel.ToolboxItem(false)] 22 // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的註釋。 23 // [System.Web.Script.Services.ScriptService] 24 public class WebService1 : System.Web.Services.WebService 25 { 26 27 public SoapHeaderHelper soapheader = new SoapHeaderHelper(); 28 //該方法不進行身份驗證,任何人都可訪問 29 [WebMethod] 30 public string HelloWorld() 31 { 32 33 return "Hello World"; 34 } 35 36 //該地方是調用SoapHeader地方,註意觀察 37 [SoapHeader("soapheader")] 38 [WebMethod] 39 public string HelloWorld2() 40 { 41 string msg = ""; 42 if (!soapheader.IsValid(out msg)) 43 { 44 return msg; 45 } 46 return "Hello World2"; 47 } 48 } 49 }
二、利用IIS發佈WebService
右擊項目->發佈->發佈項目選擇“文件系統”->選擇一個路徑->點擊發佈
打開IIS管理器
右擊網站->添加網站
與發佈普通網站不同的是,需要添加一個預設路徑
添加完成後就可以通過瀏覽器訪問到該服務
三、添加服務引用並利用SoapHeader驗證訪問介面的例子
創建新項目->控制台應用程式->命名為WSClient->右擊引用->添加服務引用
引用完成後的目錄結構
在Program.cs內添加如下代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace WSClient 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 14 ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient(); 15 //無身份驗證的HelloWorld 16 var demo1 = sr.HelloWorld(); 17 Console.WriteLine("demo1:"+demo1); 18 //有身份驗證的HelloWorld2,但請求介面時不攜帶身份信息 19 var demo2 = sr.HelloWorld2(null); 20 Console.WriteLine("demo2:" + demo2); 21 //有身份驗證的HelloWordl2,利用soapHeader提交身份信息 22 ServiceReference1.SoapHeaderHelper soapHeader = new ServiceReference1.SoapHeaderHelper(); 23 soapHeader.UserName = "admin"; 24 soapHeader.PWD = "admin"; 25 var demo3 = sr.HelloWorld2(soapHeader); 26 Console.WriteLine("demo3:" + demo3); 27 Console.ReadKey(); 28 } 29 } 30 }
執行結果:
demo下載:https://github.com/FB208/Blog_WebServiceDemo