在ASP.NET AJAX中使用應用程式服務和本地化(5):自訂應用程式服務的伺服器端實現

來源:互聯網
上載者:User

本文來自《ASP.NET AJAX程式設計 第II卷:用戶端Microsoft AJAX Library相關》的第五章《應用程式服務和本地化》。

 

身份認證與使用者個人化等應用程式服務在實際項目中的使用、實現方式具有非常強的可變性,因此,ASP.NET 2.0以自訂Provider的形式為其提供了非常強大的可定製能力。

參考:若想瞭解有關在ASP.NET 2.0中通過自訂Provider來定製身份認證與使用者個人化應用程式服務的詳細實現方法,請分別參考這兩篇MSDN文章:《Implementing a Membership Provider 》(http://msdn2.microsoft.com/en-us/library/f1kyba5e.aspx)和《Implementing a Profile Provider 》(http://msdn2.microsoft.com/en-us/library/0580x1f5(VS.80).aspx)。

在ASP.NET AJAX中,應用程式服務往往也會有同樣的自訂需求。因此,ASP.NET AJAX在提供一套預設的與伺服器端應用程式服務非同步通訊的代理的同時,也為其提供了充分的可定製能力,允許我們根據實際需要改變伺服器端應用程式服務的實現方式。

本節就將依次介紹在ASP.NET AJAX中自訂身份認證與使用者個人化應用程服務的方法。

 

5.5.1 自訂身份認證Web Service

若想自訂身份認證服務,我們需要手工編寫一個Web Service,且其中一定要包含Login()和Logout()兩個方法,分別用來實現使用者登入和登出。且這兩個方法的簽名(包括方法名、參數個數、參數順序、參數類型以及傳回值類型)均要滿足一定的要求。

下列代碼就是一個自訂身份認證Web Service的原型。我們可以參考該原型中給出的各個方法以及方法的簽名,或是基於該原型實現適合實際項目的身份認證方法:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class CustomAuthenticationService : System.Web.Services.WebService
{
    /// <summary>
    /// 實現使用者登入,其中可以自訂驗證邏輯。
    /// </summary>
    /// <param name="userName">待驗證的使用者名稱</param>
    /// <param name="password">待驗證的使用者密碼</param>
    /// <param name="createPersistentCookie">是否建立Cookie,保證登入資訊可以跨瀏覽器會話存在</param>
    /// <returns>布爾值,表示是否驗證成功</returns>
    [WebMethod]
    public bool Login(string userName, string password, bool createPersistentCookie)
    {
        return true;
    }
 
    /// <summary>
    /// 實現使用者登出。
    /// </summary>
    [WebMethod]
    public void Logout()
    {
    }
}

完成自訂的身份認證Web Service之後,若想在某個ASP.NET AJAX頁面中使用這個自訂的身份認證服務,我們需要在ScriptManager中顯式聲明:

<asp:ScriptManager ID="sm" runat="server">
    <AuthenticationService 
        Path="~/CustomApplicationServices/CustomAuthenticationService.asmx" />
</asp:ScriptManager>

其中粗體部分的<AuthenticationService />標籤對應著ASP.NET AJAX伺服器端的System.Web.UI.AuthenticationServiceManager類型,負責設定頁面中自訂身份認證Web Service的位置。將其Path屬性設定為前面編寫的CustomAuthenticationService.asmx Web Service之後,該頁面中的身份認證處理將均由這個自訂的CustomAuthenticationService.asmx處理。

提示:若是將<AuthenticationService />標籤的Path屬性設定為空白字串,或是不設定該屬性,則ASP.NET AJAX仍會使用預設的身份認證服務。

 

5.5.2 自訂使用者個人化Web Service

與自訂身份認證服務類似的是,若想自訂使用者個人化服務,我們也需要嚴格遵循一定的規則(固定的方法個數與方法簽名等)手工編寫一個Web Service。這裡我們給出了一個自訂使用者個人化Web Service的原型,至於其中的具體實現方法,需要根據實際項目的需求進行具體分析:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class CustomProfileService : System.Web.Services.WebService
{
    /// <summary>
    /// 返回屬於目前使用者所有個人化屬性
    /// </summary>
    /// <returns>包含目前使用者所有個人化屬性的IDictionary</returns>
    [WebMethod]
    public IDictionary<string, object> GetAllPropertiesForCurrentUser()
    {
        return null;
    }
 
    /// <summary>
    /// 返回屬於目前使用者的指定的個人化屬性
    /// </summary>
    /// <param name="properties">包含將要得到的個人化屬性名稱的數組</param>
    /// <returns>包含目前使用者指定的個人化屬性的IDictionary</returns>
    [WebMethod]
    public IDictionary<string, object> GetPropertiesForCurrentUser(string[] properties)
    {
        return null;
    }
 
    /// <summary>
    /// 設定屬於目前使用者的指定的使用者個人化屬性
    /// </summary>
    /// <param name="values">包含目前使用者指定的個人化屬性的IDictionary</param>
    /// <returns>成功更新的使用者個人化屬性的個數</returns>
    [WebMethod]
    public int SetPropertiesForCurrentUser(IDictionary<string, object> values)
    {
        return 0;
    }
}

完成自訂的使用者個人化Web Service之後,若想在某個ASP.NET AJAX頁面中使用該自訂的使用者個人化服務,我們也需要在ScriptManager中顯式聲明:

<asp:ScriptManager ID="sm" runat="server">
    <ProfileService
        Path="~/CustomApplicationServices/CustomProfileService.asmx" />
</asp:ScriptManager>

其中粗體部分的<ProfileService />標籤對應著ASP.NET AJAX伺服器端的System.Web.UI.ProfileServiceManager類型,負責設定頁面中自訂使用者個人化Web Service的位置。將其Path屬性設定為前面編寫的CustomProfileService.asmx Web Service之後,該頁面中的使用者個人化服務將均由這個自訂的CustomProfileService.asmx處理。

提示:若是將<ProfileService />標籤的Path屬性設定為空白字串,或是不設定該屬性,則ASP.NET AJAX仍會使用預設的使用者個人化服務。

ProfileServiceManager類型還暴露出了一個屬性:LoadProperties,表示希望隨頁面HTML代碼的載入一起發送到用戶端的使用者個人化屬性。我們可以為LoadProperties設定多個不同的使用者個人化屬性,屬性之間用逗號分開。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.