Web Service界接-如何架設附有權限之Web Service

寫在前面:
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 "未指定帳號密碼";
}

恆逸技術新知講座-Visual Studio 2010讓程式開發揮灑創意

之前雖然有參加過整日的ASP .NET新功能介紹體驗營,聽完後卻有種見樹不見林的感覺,經陳兄推薦便報名參加今日Visual Studio 2010讓程式開發揮灑創意,將今天獲取的資訊總結如下。

◎.NET 4.0是全新的Framework,並非base on 2.0
◎VS2010是採用WPF技術研發,是$M為了證明自己的WPF技術之可行性XD
◎考量效能,Intelli Trace功能預設為關閉
◎VB 10.0在本階段的進步幅度較大,總算趕上C#的上一階段
◎Dynamuc Language主要協助連接各類知名腳本語言,這項技術讓C# call COM元件不再那麼麻煩
◎C#開始支援選擇性參數,不必像以往寫一堆Type.Missing或NULL
◎4.0之後AJAX開始可以放在Client端(搭配jQuery),不再僅限於ASP~連html都可以用,client side的資料binding是可以實現的!(但要額外下載安裝AJAX Client Library)
◎Dynamic Data:之前董大偉老師的講座有略窺一二...這邊不贅述
◎提供好用的Web Developyment Projrct,幫你一次到位~設定好Application Pool、DB,透過web.config檔案轉換技術方便developer直接從開發階段轉換成上線階段。
◎WPF在4.0開始提供新的資料存取方式,開始趨向WinForm那樣的簡便模式~可以用拉的
◎.NET 4.0中更改幅度最小屬WCF,但也增加不少新功能。
◎WorkFlow 3.5 & 4.0不相容!要升級請使用$M開發的中介程式來call。