当前位置:首页 > 新瓶旧酒ASP.NET AJAX(10) – 客户端脚本编程(Sys.Services命名空间下的)

新瓶旧酒ASP.NET AJAX(10) – 客户端脚本编程(Sys.Services命名空间下的)

点击次数:1004  更新日期:2010-12-30
\n

新瓶旧酒ASP.NET AJAX(10) – 客户端脚本编程(Sys.Services命名空间下的类)


\n


介绍
ASP.NET AJAX的Sys.Services.AuthenticationService类、Sys.Services.ProfileService类、Sys.Services.ProfileGroup类完美地和ASP.NET 2.0的Membership和Profile进行了集成


\n


关键
1、Sys.Services.AuthenticationService类的login()方法
Sys.Services.AuthenticationService.login(userName, password, isPersistent, customInfo, redirectUrl, loginCompletedCallback, failedCallback, userContext);
·userName – 用户名
·password – 密码
·isPersistent – 是否跨浏览器保存认证信息(持久保留)
·customInfo – 保留字段,可能在将来使用
·redirectUrl – 登录成功后重定向到的URL
·loginCompletedCallback – 登录成功后的回调函数
·failedCallback – 登录失败后的回调函数
·userContext – 用户上下文
WebService中与其对应的方法 – public bool Login()


\n

2、登录成功后的回调函数
function LoginComplete(bool validCredentials, userContext, methodName)
·validCredentials – 是否成功通过了验证
·userContext – 用户上下文
·methodName – 调用的方法名


\n

3、Sys.Services.AuthenticationService类的logout()方法
Sys.Services.AuthenticationService.logout(redirectUrl, logoutCompletedCallback, failedCallback, userContext);
·redirectUrl – 注销成功后重定向到的URL
·logoutCompletedCallback – 注销成功后的回调函数
·failedCallback – 注销失败后的回调函数
·userContext – 用户上下文
WebService中与其对应的方法 – public void Logout()


\n

4、注销成功后的回调函数
function LogoutComplete(result, userContext, methodName)
·result – 保留字段,可能在将来使用,始终为null
·userContext – 用户上下文
·methodName – 调用的方法名


\n

5、Sys.Services.AuthenticationService类的属性
·defaultLoginCompletedCallback – 登录成功后的回调函数
·defaultLogoutCompletedCallback – 注销成功后的回调函数
·defaultFailedCallback – 登录或注销失败后的回调函数
·isLoggedIn – 当前用户是否已经登录
·path – authentication service路径
·timeout – 超时时间


\n

6、Sys.Services.ProfileService类的load()方法
Sys.Services.ProfileService.load(propertyNames, loadCompletedCallback, failedCallback, userContext);
·propertyNames – Profile属性名称数组
·loadCompletedCallback – 成功后的回调函数
·failedCallback – 失败后的回调函数
·userContext – 用户上下文
WebService中与其对应的方法 – public IDictionary<string, object> GetAllPropertiesForCurrentUser()和public IDictionary<string, object> GetPropertiesForCurrentUser(string[] properties)


\n

7、读取Profile成功后的回调函数
function onLoadCompleted(numProperties, userContext, methodName)
·numProperties – 返回的Profile属性个数
·userContext – 用户上下文
·methodName – 调用的方法名


\n

8、Sys.Services.ProfileService类的save()方法
Sys.Services.ProfileService.load(propertyNames, saveCompletedCallback, failedCallback, userContext);
·propertyNames – Profile属性名称数组
·saveCompletedCallback – 成功后的回调函数
·failedCallback – 失败后的回调函数
·userContext – 用户上下文
·WebService中与其对应的方法 – public int SetPropertiesForCurrentUser(IDictionary<string, object> values)


\n

9、保存Profile成功后的回调函数
onSaveCompleted(numProperties, userContext, methodName)
·numProperties – 保存的Profile属性个数
·userContext – 用户上下文
·methodName – 调用的方法名


\n

10、Sys.Services.ProfileService类的属性
·读取或设置某个Profile的属性要这么写 – Sys.Services.ProfileService.properties.FieldName;
·defaultLoadCompletedCallback – 读取Profile成功后的回调函数
·defaultSaveCompletedCallback – 保存Profile成功后的回调函数
·defaultFailedCallback – 读取或保存Profile失败后的回调函数
·path – profile service路径
·timeout – 超时时间


\n

11、Sys.Services.ProfileGroup类
·定义一个Profile组(同时需要在Web.config中定义)


\n

12、登录或注销失败、读取或保存Profile失败后的回调函数
function onFailed(error, userContext, methodName)
·error – Sys.Net.WebServiceError对象
·userContext – 用户上下文
·methodName – 调用的方法名


\n

13、如果要自动调用相关服务的话,则需要在web.config中的<configuration />节点下增加类似如下的配置
<webServices>
<authenticationService enabled=”true” requireSSL=”false”/>
<profileService enabled=”true”
readAccessProperties=”Age, Salary”
writeAccessProperties=”Age, Salary”
/>
</webServices>


\n

示例
AuthenticationService.asmx
<%@ WebService Language=”C#” Class=”AuthenticationService” %>


\n

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;


\n

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class AuthenticationService : System.Web.Services.WebService
{
/**//// <summary>
/// 登录
/// </summary>
/// <param name=”userName”>用户名</param>
/// <param name=”password”>密码</param>
/// <param name=”createPersistentCookie”>是否跨浏览器保存认证信息(持久保留)</param>
/// <returns></returns>
[WebMethod]
public bool Login(string userName, string password, bool createPersistentCookie)
{
//Place code here.


\n

System.Web.Security.FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
return true;
}


\n

/**//// <summary>
/// 注销
/// </summary>
[WebMethod]
public void Logout()
{
//Place code here.
}
}


\n


ProfileService.asmx
<%@ WebService Language=”C#” Class=”ProfileService” %>


\n

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
using System.Collections.Generic;


\n

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class ProfileService : System.Web.Services.WebService
{
/**//// <summary>
/// 获取用户的全部Profile
/// </summary>
/// <returns></returns>
[WebMethod]
public IDictionary<string, object> GetAllPropertiesForCurrentUser()
{
Dictionary<string, object> dic = new Dictionary<string, object>();


\n

dic.Add(“Age”, 27);
dic.Add(“Salary”, 100);


\n

Article article = new Article();
article.Title = “Article Title From Server”;
article.PublishTime = DateTime.Now;


\n

dic.Add(“Article”, article);


\n

return dic;
}


\n

/**//// <summary>
/// 获取用户的指定的Profile
/// </summary>
/// <param name=”properties”>属性名称数组</param>
/// <returns></returns>
[WebMethod]
public IDictionary<string, object> GetPropertiesForCurrentUser(string[] properties)
{
//Place code here.
return null;
}


\n

/**//// <summary>
/// 保存用户的Profile
/// </summary>
/// <param name=”values”>用户的Profile的字典数据</param>
/// <returns></returns>
[WebMethod]
public int SetPropertiesForCurrentUser(IDictionary<string, object> values)
{
//Place code here.
return values.Count;
}
}


\n

/**//// <summary>
/// Article实体类
/// </summary>
/// <remarks>
/// 示例而已,实际项目中要继承自System.Web.Profile.ProfileBase
/// </remarks>
public class Article
{
private string _title;
/**//// <summary>
/// 文章标题
/// </summary>
public string Title
{
get { return _title; }
set { _title = value; }
}


\n

private DateTime _publishTime;
/**//// <summary>
/// 文章发布日期
/// </summary>
public DateTime PublishTime
{
get { return _publishTime; }
set { _publishTime = value; }
}
}


\n

Sample.aspx
<%@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”Sample.aspx.cs”
Inherits=”ClientScripting_SysServices_Sample” Title=”Sys.Services命名空间下的类” %>


\n

<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
<div>
帐号:<input type=”text” id=”txtUserId” /></div>
<div>
密码:<input type=”password” id=”txtPassword” /></div>
<div>
&nbsp;</div>
<div>
<input type=”button” id=”btnLogin” value=”登录” onclick=”btnLogin_click()” />
<input type=”button” id=”btnLogout” value=”注销” onclick=”btnLogout_click()” /></div>
<div>
&nbsp;</div>
<div>
年龄:<input type=”text” id=”txtAge” /></div>
<div>
薪水:<input type=”text” id=”txtSalary” /></div>
<div>
<input type=”button” id=”btnSave” value=”保存Profile” onclick=”btnSave_click()” />
<input type=”button” id=”btnLoad” value=”读取Profile” onclick=”btnLoad_click()” />
</div>
<div>
&nbsp;</div>
<div id=”result” />


\n

<script type=”text/javascript”>
var userId;
var password;
var login;
var logout;
var age;
var salary


\n

function pageLoad()
{
userId = get(“txtUserId”);
password = get(“txtPassword”);
login = get(“btnLogin”);
logout = get(“btnLogout”);
age = get(“txtAge”);
salary = get(“txtSalary”);

// path – authentication service路径
get(“result”).innerHTML = “AuthenticationService path:” + Sys.Services.AuthenticationService.get_path() + “<br />”;
// timeout – 超时时间
get(“result”).innerHTML += “AuthenticationService timeout:” + Sys.Services.AuthenticationService.get_timeout() + “<br />”;
// path – profile service路径
get(“result”).innerHTML += “ProfileService path:” + Sys.Services.ProfileService.get_path() + “<br />”;
// timeout – 超时时间
get(“result”).innerHTML += “ProfileService timeout:” + Sys.Services.ProfileService.get_timeout() + “<br />”;
}

function btnLogin_click()
{
// defaultLoginCompletedCallback – 登录成功后的回调函数
Sys.Services.AuthenticationService.set_defaultLoginCompletedCallback(onLoginCompleted);
// defaultFailedCallback – 登录或注销失败后的回调函数
Sys.Services.AuthenticationService.set_defaultFailedCallback(onFailed);

Sys.Services.AuthenticationService.login
(
userId.value, // 用户名
password.value, // 密码
false, // 是否跨浏览器保存认证信息(持久保留)
null, // 保留字段,可能在将来使用
null, // 登录成功后重定向到的URL
null, // 登录成功后的回调函数
null, // 登录失败后的回调函数
“用户上下文” // 用户上下文
);
}

function btnLogout_click()
{
// defaultLogoutCompletedCallback – 注销成功后的回调函数
Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted);
// defaultFailedCallback – 登录或注销失败后的回调函数
Sys.Services.AuthenticationService.set_defaultFailedCallback(onFailed);


\n

Sys.Services.AuthenticationService.logout
(
null, // 注销成功后重定向到的URL
null, // 注销成功后的回调函数
null, // 注销失败后的回调函数
null // 用户上下文
);
}

function onLoginCompleted(validCredentials, userContext, methodName)
{
password.value = “”;

// validCredentials – 是否成功通过了验证
// userContext – 用户上下文
// methodName – 调用的方法名
if (validCredentials)
{
userId.value = “”;

get(“result”).innerHTML = “登录成功” + “<br />”;
get(“result”).innerHTML += “用户上下文:” + userContext + “<br />”;
get(“result”).innerHTML += “调用的方法名为:” + methodName + “<br />”;
}
else
{
get(“result”).innerHTML = “登录失败” + “<br />”;
}

// isLoggedIn – 当前用户是否已经登录
var status = Sys.Services.AuthenticationService.get_isLoggedIn();
get(“result”).innerHTML += “登录状态:” + status + “<br />”;
}

function onFailed(error, userContext, methodName)
{
// error – Sys.Net.WebServiceError对象
// userContext – 用户上下文
// methodName – 调用的方法名
get(“result”).innerHTML += “错误信息:” + error.get_message() + “<br />”;
}

function onLogoutCompleted(result, userContext, methodName)
{
// result – 保留字段,可能在将来使用,始终为null
// userContext – 用户上下文
// methodName – 调用的方法名
alert(“成功调用” + methodName) + “<br />”;
}


function btnLoad_click()
{
// defaultLoadCompletedCallback – 读取Profile成功后的回调函数
Sys.Services.ProfileService.set_defaultLoadCompletedCallback(onLoadCompleted);
// defaultFailedCallback – 读取或保存Profile失败后的回调函数
Sys.Services.ProfileService.set_defaultFailedCallback(onFailed);

Sys.Services.ProfileService.load
(
null, // Profile属性名称数组
null, // 成功后的回调函数
null, // 失败后的回调函数
null // 用户上下文
);
}

function btnSave_click()
{
// defaultSaveCompletedCallback – 保存Profile成功后的回调函数
Sys.Services.ProfileService.set_defaultSaveCompletedCallback(onSaveCompleted);
// defaultFailedCallback – 读取或保存Profile失败后的回调函数
Sys.Services.ProfileService.set_defaultFailedCallback(onFailed);

Sys.Services.ProfileService.properties.Age = age.value;
Sys.Services.ProfileService.properties.Salary = salary.value;

// 定义一个Profile组(同时需要在Web.config中定义)
Sys.Services.ProfileService.properties.Article = new Sys.Services.ProfileGroup();
Sys.Services.ProfileService.properties.Article.Title = “Article Title”;
Sys.Services.ProfileService.properties.Article.PublishTime = new Date();


\n

Sys.Services.ProfileService.save
(
null, // Profile属性名称数组
null, // 成功后的回调函数
null, // 失败后的回调函数
null // 用户上下文
);
}

function onLoadCompleted(numProperties, userContext, methodName)
{
// numProperties – 返回的Profile属性个数
// userContext – 用户上下文
// methodName – 调用的方法名
get(“result”).innerHTML = “通过Profile读取的属性的数量为:” + numProperties.toString() + “<br />”;
get(“result”).innerHTML += “Age:” + Sys.Services.ProfileService.properties.Age + “<br />”;
get(“result”).innerHTML += “Article Title:” + Sys.Services.ProfileService.properties.Article.Title + “<br />”;
get(“result”).innerHTML += “Article PublishTime:” + Sys.Services.ProfileService.properties.Article.PublishTime.format(“yyyy-MM-dd”) + “<br />”;
}


\n

function onSaveCompleted(numProperties, userContext, methodName)
{
// numProperties – 保存的Profile属性个数
// userContext – 用户上下文
// methodName – 调用的方法名
get(“result”).innerHTML = “通过Profile保存的属性的数量为:” + numProperties.toString() + “<br />”;
}
</script>


\n

</asp:Content>


\n

ScriptManager的设置
<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
<AuthenticationService Path=”~/ClientScripting/SysServices/AuthenticationService.asmx” />
<ProfileService Path=”~/ClientScripting/SysServices/ProfileService.asmx” />
</asp:ScriptManager>


\n

Web.config中的相关设置(在<system.web />节点下)
<profile enabled=”true”>
<properties>
<group name=”Article”>
<add name=”Title” type=”System.String” />
<add name=”PublishTime” type=”System.DateTime” />
</group>
</properties>
</profile>


\n

运行结果
1、页面加载后
AuthenticationService path:/Web/ClientScripting/SysServices/AuthenticationService.asmx
AuthenticationService timeout:0
ProfileService path:ProfileService.asmx
ProfileService timeout:0


\n

2、单击“登录”按钮
登录成功
用户上下文:用户上下文
调用的方法名为:Sys.Services.AuthenticationService.login
登录状态:true


\n

3、单击“注销”按钮
弹出框,信息:成功调用Sys.Services.AuthenticationService.logout


\n

4、单击“保存Profile”按钮
通过Profile保存的属性的数量为:4


\n

5、单击“读取Profile”按钮
通过Profile读取的属性的数量为:3
Age:27
Article Title:Article Title From Server
Article PublishTime:2007-07-12

作者:webabcd

[源码下载]

\n