在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现
2007-07-14 00:07
841 查看
本文来自《ASP.NETAJAX程序设计第II卷:客户端MicrosoftAJAXLibrary相关》的第五章《应用程序服务和本地化》。
身份认证与用户个性化等应用程序服务在实际项目中的使用、实现方式具有非常强的可变性,因此,ASP.NET2.0以自定义Provider的形式为其提供了非常强大的可定制能力。
参考:若想了解有关在ASP.NET2.0中通过自定义Provider来定制身份认证与用户个性化应用程序服务的详细实现方法,请分别参考这两篇MSDN文章:《ImplementingaMembershipProvider》(http://msdn2.microsoft.com/en-us/library/f1kyba5e.aspx)和《ImplementingaProfileProvider》(http://msdn2.microsoft.com/en-us/library/0580x1f5(VS.80).aspx)。
在ASP.NETAJAX中,应用程序服务往往也会有同样的自定义需求。因此,ASP.NETAJAX在提供一套默认的与服务器端应用程序服务异步通讯的代理的同时,也为其提供了充分的可定制能力,允许我们根据实际需要改变服务器端应用程序服务的实现方式。
本节就将依次介绍在ASP.NETAJAX中自定义身份认证与用户个性化应用程服务的方法。
5.5.1自定义身份认证WebService
若想自定义身份认证服务,我们需要手工编写一个WebService,且其中一定要包含Login()和Logout()两个方法,分别用来实现用户登录和注销。且这两个方法的签名(包括方法名、参数个数、参数顺序、参数类型以及返回值类型)均要满足一定的要求。
下列代码就是一个自定义身份认证WebService的原型。我们可以参考该原型中给出的各个方法以及方法的签名,或是基于该原型实现适合实际项目的身份认证方法:
[code][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
完成自定义的身份认证WebService之后,若想在某个ASP.NETAJAX页面中使用这个自定义的身份认证服务,我们需要在ScriptManager中显式声明:
[code]<AuthenticationService
[/code]
其中粗体部分的<AuthenticationService/>标签对应着ASP.NETAJAX服务器端的System.Web.UI.AuthenticationServiceManager类型,负责设置页面中自定义身份认证WebService的位置。将其Path属性设置为前面编写的CustomAuthenticationService.asmxWebService之后,该页面中的身份认证处理将均由这个自定义的CustomAuthenticationService.asmx处理。
提示:若是将<AuthenticationService/>标签的Path属性设置为空字符串,或是不设置该属性,则ASP.NETAJAX仍会使用默认的身份认证服务。
5.5.2自定义用户个性化WebService
与自定义身份认证服务类似的是,若想自定义用户个性化服务,我们也需要严格遵循一定的规则(固定的方法个数与方法签名等)手工编写一个WebService。这里我们给出了一个自定义用户个性化WebService的原型,至于其中的具体实现方法,需要根据实际项目的需求进行具体分析:
[code][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[/code]
完成自定义的用户个性化WebService之后,若想在某个ASP.NETAJAX页面中使用该自定义的用户个性化服务,我们也需要在ScriptManager中显式声明:
[code]<ProfileService
[/code]
其中粗体部分的<ProfileService/>标签对应着ASP.NETAJAX服务器端的System.Web.UI.ProfileServiceManager类型,负责设置页面中自定义用户个性化WebService的位置。将其Path属性设置为前面编写的CustomProfileService.asmxWebService之后,该页面中的用户个性化服务将均由这个自定义的CustomProfileService.asmx处理。
提示:若是将<ProfileService/>标签的Path属性设置为空字符串,或是不设置该属性,则ASP.NETAJAX仍会使用默认的用户个性化服务。
ProfileServiceManager类型还暴露出了一个属性:LoadProperties,表示希望随页面HTML代码的加载一起发送到客户端的用户个性化属性。我们可以为LoadProperties设置多个不同的用户个性化属性,属性之间用逗号分开。
身份认证与用户个性化等应用程序服务在实际项目中的使用、实现方式具有非常强的可变性,因此,ASP.NET2.0以自定义Provider的形式为其提供了非常强大的可定制能力。
参考:若想了解有关在ASP.NET2.0中通过自定义Provider来定制身份认证与用户个性化应用程序服务的详细实现方法,请分别参考这两篇MSDN文章:《ImplementingaMembershipProvider》(http://msdn2.microsoft.com/en-us/library/f1kyba5e.aspx)和《ImplementingaProfileProvider》(http://msdn2.microsoft.com/en-us/library/0580x1f5(VS.80).aspx)。
在ASP.NETAJAX中,应用程序服务往往也会有同样的自定义需求。因此,ASP.NETAJAX在提供一套默认的与服务器端应用程序服务异步通讯的代理的同时,也为其提供了充分的可定制能力,允许我们根据实际需要改变服务器端应用程序服务的实现方式。
本节就将依次介绍在ASP.NETAJAX中自定义身份认证与用户个性化应用程服务的方法。
5.5.1自定义身份认证WebService
若想自定义身份认证服务,我们需要手工编写一个WebService,且其中一定要包含Login()和Logout()两个方法,分别用来实现用户登录和注销。且这两个方法的签名(包括方法名、参数个数、参数顺序、参数类型以及返回值类型)均要满足一定的要求。
下列代码就是一个自定义身份认证WebService的原型。我们可以参考该原型中给出的各个方法以及方法的签名,或是基于该原型实现适合实际项目的身份认证方法:
[WebService(Namespace="http://tempuri.org/")]
[code][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
publicclassCustomAuthenticationService:System.Web.Services.WebService
{
///<summary>
///实现用户登录,其中可以自定义验证逻辑。
///</summary>
///<paramname="userName">待验证的用户名</param>
///<paramname="password">待验证的用户密码</param>
///<paramname="createPersistentCookie">是否创建Cookie,保证登录信息可以跨浏览器会话存在</param>
///<returns>布尔值,表示是否验证成功</returns>
[WebMethod]
publicboolLogin(stringuserName,stringpassword,boolcreatePersistentCookie)
{
returntrue;
}
///<summary>
///实现用户注销。
///</summary>
[WebMethod]
publicvoidLogout()
{
}
}
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
完成自定义的身份认证WebService之后,若想在某个ASP.NETAJAX页面中使用这个自定义的身份认证服务,我们需要在ScriptManager中显式声明:
<asp:ScriptManagerID="sm"runat="server">
[code]<AuthenticationService
Path="~/CustomApplicationServices/CustomAuthenticationService.asmx"/>
</asp:ScriptManager>
[/code]
其中粗体部分的<AuthenticationService/>标签对应着ASP.NETAJAX服务器端的System.Web.UI.AuthenticationServiceManager类型,负责设置页面中自定义身份认证WebService的位置。将其Path属性设置为前面编写的CustomAuthenticationService.asmxWebService之后,该页面中的身份认证处理将均由这个自定义的CustomAuthenticationService.asmx处理。
提示:若是将<AuthenticationService/>标签的Path属性设置为空字符串,或是不设置该属性,则ASP.NETAJAX仍会使用默认的身份认证服务。
5.5.2自定义用户个性化WebService
与自定义身份认证服务类似的是,若想自定义用户个性化服务,我们也需要严格遵循一定的规则(固定的方法个数与方法签名等)手工编写一个WebService。这里我们给出了一个自定义用户个性化WebService的原型,至于其中的具体实现方法,需要根据实际项目的需求进行具体分析:
[WebService(Namespace="http://tempuri.org/")]
[code][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
publicclassCustomProfileService:System.Web.Services.WebService
{
///<summary>
///返回属于当前用户所有个性化属性
///</summary>
///<returns>包含当前用户所有个性化属性的IDictionary</returns>
[WebMethod]
publicIDictionary<string,object>GetAllPropertiesForCurrentUser()
{
returnnull;
}
///<summary>
///返回属于当前用户的指定的个性化属性
///</summary>
///<paramname="properties">包含将要得到的个性化属性名称的数组</param>
///<returns>包含当前用户指定的个性化属性的IDictionary</returns>
[WebMethod]
publicIDictionary<string,object>GetPropertiesForCurrentUser(string[]properties)
{
returnnull;
}
///<summary>
///设置属于当前用户的指定的用户个性化属性
///</summary>
///<paramname="values">包含当前用户指定的个性化属性的IDictionary</param>
///<returns>成功更新的用户个性化属性的个数</returns>
[WebMethod]
publicintSetPropertiesForCurrentUser(IDictionary<string,object>values)
{
return0;
}
}
[/code]
完成自定义的用户个性化WebService之后,若想在某个ASP.NETAJAX页面中使用该自定义的用户个性化服务,我们也需要在ScriptManager中显式声明:
<asp:ScriptManagerID="sm"runat="server">
[code]<ProfileService
Path="~/CustomApplicationServices/CustomProfileService.asmx"/>
</asp:ScriptManager>
[/code]
其中粗体部分的<ProfileService/>标签对应着ASP.NETAJAX服务器端的System.Web.UI.ProfileServiceManager类型,负责设置页面中自定义用户个性化WebService的位置。将其Path属性设置为前面编写的CustomProfileService.asmxWebService之后,该页面中的用户个性化服务将均由这个自定义的CustomProfileService.asmx处理。
提示:若是将<ProfileService/>标签的Path属性设置为空字符串,或是不设置该属性,则ASP.NETAJAX仍会使用默认的用户个性化服务。
ProfileServiceManager类型还暴露出了一个属性:LoadProperties,表示希望随页面HTML代码的加载一起发送到客户端的用户个性化属性。我们可以为LoadProperties设置多个不同的用户个性化属性,属性之间用逗号分开。
相关文章推荐
- 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现
- ASP.NET AJAX自定义应用程序服务的服务器端实现
- 在ASP.NET AJAX中使用应用程序服务和本地化(2):示例程序:实现用户登录和注销
- 在ASP.NET AJAX中使用应用程序服务和本地化:实现用户登录和注销(转自:Dflying Chen @ cnblogs)
- 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
- 在ASP.NET AJAX中使用应用程序服务和本地化(6):创建支持多语言的ASP.NET AJAX站点、小结
- 在ASP.NET AJAX中使用应用程序服务和本地化(1):身份认证组件AuthenticationService
- 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息
- 在ASP.NET AJAX中使用应用程序服务和本地化(0):目录
- 使用SignalR实现asp.net服务器端的推送(Server Push)
- Microsoft ASP.NET AJAX 使用客户端调用服务器端的方法
- Echarts 使用asp.net +ashx+ajax 实现 饼图、柱形图后台交互
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页
- 新写的一个使用ASP.NET AJAX中的UpdatePanel控件实现GridView的无刷新删除,更新,添加,查询!
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
- 基于asp.net下使用jquery实现ajax的解决方法
- 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005
- 基于asp.net下使用jquery实现ajax的解决方法
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【六】——实现资源间的关联
- (学习Asp.net Ajax笔记一)使用 Microsoft AJAX Library 创建自定义客户端脚本之一