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


======================================================
注:本文源代码点此下载
======================================================

本文来自《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

{

///

/// 实现用户登录,其中可以自定义验证逻辑。

///

///

待验证的用户名

///

待验证的用户密码

///

是否创建cookie,保证登录信息可以跨浏览器会话存在

/// 布尔值,表示是否验证成功

[webmethod]

public bool login(string username, string password, bool createpersistentcookie)

{

return true;

}

///

/// 实现用户注销。

///

[webmethod]

public void logout()

{

}

}

完成自定义的身份认证web service之后,若想在某个asp.net ajax页面中使用这个自定义的身份认证服务,我们需要在scriptmanager中显式声明:

asp:scriptmanager id="sm" runat="server">

authenticationservice

path="~/customapplicationservices/customauthenticationservice.asmx" />

asp:scriptmanager>

其中粗体部分的标签对应着asp.net ajax服务器端的system.web.ui.authenticationservicemanager类型,负责设置页面中自定义身份认证web service的位置。将其path属性设置为前面编写的customauthenticationservice.asmx web service之后,该页面中的身份认证处理将均由这个自定义的customauthenticationservice.asmx处理。

提示:若是将标签的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

{

///

/// 返回属于当前用户所有个性化属性

///

/// 包含当前用户所有个性化属性的idictionary

[webmethod]

public idictionarystring, object> getallpropertiesforcurrentuser()

{

return null;

}

///

/// 返回属于当前用户的指定的个性化属性

///

///

包含将要得到的个性化属性名称的数组

/// 包含当前用户指定的个性化属性的idictionary

[webmethod]

public idictionarystring, object> getpropertiesforcurrentuser(string[] properties)

{

return null;

}

///

/// 设置属于当前用户的指定的用户个性化属性

///

///

包含当前用户指定的个性化属性的idictionary

/// 成功更新的用户个性化属性的个数

[webmethod]

public int setpropertiesforcurrentuser(idictionarystring, object> values)

{

return 0;

}

}

完成自定义的用户个性化web service之后,若想在某个asp.net ajax页面中使用该自定义的用户个性化服务,我们也需要在scriptmanager中显式声明:

asp:scriptmanager id="sm" runat="server">

profileservice

path="~/customapplicationservices/customprofileservice.asmx" />

asp:scriptmanager>

其中粗体部分的

标签对应着asp.net ajax服务器端的system.web.ui.profileservicemanager类型,负责设置页面中自定义用户个性化web service的位置。将其path属性设置为前面编写的customprofileservice.asmx web service之后,该页面中的用户个性化服务将均由这个自定义的customprofileservice.asmx处理。

提示:若是将

标签的path属性设置为空字符串,或是不设置该属性,则asp.net ajax仍会使用默认的用户个性化服务。

profileservicemanager类型还暴露出了一个属性:loadproperties,表示希望随页面html代码的加载一起发送到客户端的用户个性化属性。我们可以为loadproperties设置多个不同的用户个性化属性,属性之间用逗号分开。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值