本文来自《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设置多个不同的用户个性化属性,属性之间用逗号分开。

转载于:https://www.cnblogs.com/dflying/archive/2007/07/14/817700.html

在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...相关推荐

  1. 现存问题以及解决方案:在ASP.NET AJAX中从客户端向服务器端传送DataTable

    摘要 在<现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的DataTable>这篇文章中,我给出了一个在ASP.NET AJAX中从服务器端得到客户端DataTable ...

  2. 深入剖析微软ASP.NET Ajax中的数据绑定构架下篇之二

    四.例2-数据库绑定 现在,我们来讨论更为复杂的数据库绑定的例子.根据我们前面的讨论,我们找到了使用DataSource的典型场所:在前面的例1中,我们使用了一种内存数据来模拟有状态的web服务.但是 ...

  3. 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 在内建了身份认证应用程序服务之 ...

  4. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 让我们通过编写一个完整的示例程 ...

  5. 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序

    图片 假设我们要创建一个监视Web应用程序,该应用程序为用户提供了一个能够显示一系列信息的仪表板,这些信息会随着时间的推移而更新. 第一种方法是在定义的时间间隔(轮询)定期调用API 以更新仪表板上的 ...

  6. 分清ASP.NET AJAX中的Extender和Behavior模型

    ASP.NET AJAX提出了多种模型,在客户端有Component.Control和Behavior模型,在服务器端有ScirptControl和Extender模型.这些模型各有各的用途,但是请注 ...

  7. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  8. 在ASP.NET Core中使用brotli压缩

    Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ...

  9. SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板

    WCF Data Services是SharePoint 2010中一个极具吸引力的新特性.然而,因为它的强大,直接对其进行编程仍然会有点痛苦.幸运的是,一个新的相关技术 -- ASP.Net AJA ...

最新文章

  1. Java中的OutOfMemoryError的各种情况及解决方法
  2. GlusterFS配置管理(五)
  3. Windows Phone UI控件
  4. 微量元素与中医药 谋定·大健康医药-李喜贵:辩证研究病理变化
  5. java中Map有哪些实现类
  6. [css] 说说浏览器解析CSS选择器的过程?
  7. ajax 链接java_如何使用ajax将下拉菜单链接到表
  8. 实践中整理出tomcat集群和负载均衡
  9. trunk配置功能详解
  10. position:absolute的小坑
  11. Resources$NotFoundException
  12. 配置使用Powershell管理Azure Stack
  13. 机器学习基础(六十一)—— 范数及范数的微分
  14. 公式编辑器下载、使用
  15. 2d unity 多物体 射线_[蛮牛驿馆] Unity2D:用射线检测物体的点击
  16. Linux安装GaussDB数据库图文,gaussdb数据库怎么样?如何安装?
  17. CF1654-G. Snowy Mountain(2900) GOOD
  18. 正确设置 pip,避免There was a problem confirming the ssl certificate问题
  19. 06 - table表格标签+ 行合并+列合并
  20. 用Python去除PDF水印尝试

热门文章

  1. java邮箱找回密码_java实现邮箱找回密码 简单邮件
  2. php 扩展库 开发环境,PHP 扩展开发环境搭建
  3. Python 基础知识 D7
  4. FCN数据预处理(code)
  5. 利用kaggle训练模型
  6. java 判断是否是昨天_java判断日期是否是今天
  7. agx 安装ros opencv_Linux下配置深度学习开发环境(及ros)
  8. keras+yolo实现旗帜识别
  9. ICDAR发票识别冠军(文字检测Corner)
  10. 阿里音乐流行趋势预测-代码分享