1.本測試使用傳統的Web Service,暫不涉獵WCF。
2.開發工具使用VS2008
SETP 1:新增一ASP .NET Web Service應用程式
新增專案
專案初始狀態
SETP 2:對Service1.asmx按右鍵選擇『在瀏覽器中檢視』
預設WebMethod-HelloWorld
觀察SOAP如何描述服務
由上圖可看出,HelloWorld之SOAP目前只有SOAPBody ,request無須傳值,response回傳string。接下來實作一個需要通過帳號驗證的HelloWorld,設計方式以SOAPHeader包裝。
SETP 3:設計SOAPHeader(在Service1.asmx.cs撰寫)
﹡引入適當namespace
using System.Web.Services.Protocols;
﹡定義一個繼承SoapHeader類別的Class
public class HeoSoapHeader : SoapHeader
{
public string userid;
public string password;
}
﹡將前述自訂之SoapHeader類別(HeoSoapHeader)指定給HelloWorld()
﹡Complie專案後,於瀏覽器中檢視服務並觀察SOAP
加入自訂SOAPHeader的新HelloWorld
由上圖可看出多了< soap:Header >之tag,其中指定的userid與password則是自定義HeoSoapHeader中的兩個屬性!﹡繼續完成結合SOAPHeader的HelloWorld
public string HelloWorld()
{
if (heosoapheader != null)
{
if (heosoapheader.userid == "admin" && heosoapheader.password == "P@ssw0rd")
{
return "Hello!";
}else return "驗證失敗。";
} return "未指定驗證身份。";
}
﹡Compile專案後,叫用HelloWorld()方法
叫用HelloWorld結果
一般Web測試提供的參數輸入介面,只有WebMethod定義之參數,不包含SOAPHeader裡面的資訊,因此呼叫HelloWorld時會因缺少帳號資訊,無法成功Hello。至此已完成"如何架設附有權限之Web Service",一旦呼叫時未一併給予SoapHeader資訊,就會因帳號驗證失敗,而回傳WebMethod自定義的錯誤訊息,無法進一步取得想要的data。
-----------------------------本文目標已達成---------------------
----想隨piggy作''如何通過Web Service帳號驗證並取得資料'',請續讀----改寫一下前述的簡易版HelloWorld(),讓此WebMethod能連接後端DB,確實提供查詢並回傳資料,進行下一篇測試也比較有fu。以下結合LINQ技術作O/R Mapping,將HelloWorld()改為輸入''抽水站名稱'',回傳''抽水站地址''的WebMethod。
SETP 4:改寫HelloWorld()方法
LINQ非本文重點,直接來完整程式碼,給你個痛快XD
public string HelloWorld(string pumpName)
{
if (heosoapheader != null)
{
if (heosoapheader.userid == "admin" && heosoapheader.password == "P@ssw0rd") { pumpstationDataContext context = new pumpstationDataContext();
var result = (from p in context.pumpstation where p.NAME_C.Contains(name) select p); if (result.ToList().Count > 0) { return result.First().ADDR_C; }else return "查無此抽水站!";
}else return "帳號密碼錯誤";
}else return "未指定帳號密碼";
}
沒有留言:
張貼留言