异步通信实现捕捉客户注销信息
来源:互联网 发布:淘宝旺铺导航条 编辑:程序博客网 时间:2024/05/01 08:22
由于ASP.NET是基于服务端的编程框架,因此我们很难在服务端用代码来保存客户端的注销信息,原因有以下两点:
1.有些用户经常以关闭浏览器的形式(想睡觉了,不想看网页了)来“注销”,由于这一事件是属于客户端触发,服务端无法捕捉,更谈不上在这个事件保存用户注销信息了。
2.也有些用户经常在浏览器中输入其他网址(他要访问别的网站了)来实现“注销”,同样的,这个客户端事件服务端也无法捕捉。
分析以上两点,可以看出服务端对客户端事件的处理显得有心无力,究其本质原因,是由于Web Application与生俱来的执行方式造成的(略过),因此不得不引入另外的方法:Javascript 来捕捉客户端事件,用Web Service来实现服务端保存注销信息。
ASPX页面代码如下:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<script type="text/javascript">
//页面卸载事件(用户关闭浏览器或者转向其他页面都会触发此事件)
function pageUnload()
...{
//用户帐号,实际应用的话可以从Session或者ViewState获取,这里不演示
var Account="dreamjhy";
//调用WebService中UserLogout方法保存用户注销信息(例子从简,只获取用户帐号和注销时间)
WebService.UserLogout(Account);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<!--生成WebService客户端代理-->
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" />
</Services>
</asp:ScriptManager>
<div>
</div>
<!--该按钮用于转向其他页面,从而触发PageUnload事件-->
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Default.aspx">转向其他页面</asp:HyperLink>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<script type="text/javascript">
//页面卸载事件(用户关闭浏览器或者转向其他页面都会触发此事件)
function pageUnload()
...{
//用户帐号,实际应用的话可以从Session或者ViewState获取,这里不演示
var Account="dreamjhy";
//调用WebService中UserLogout方法保存用户注销信息(例子从简,只获取用户帐号和注销时间)
WebService.UserLogout(Account);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<!--生成WebService客户端代理-->
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" />
</Services>
</asp:ScriptManager>
<div>
</div>
<!--该按钮用于转向其他页面,从而触发PageUnload事件-->
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Default.aspx">转向其他页面</asp:HyperLink>
</form>
</body>
</html>
WebSerive代码如下:
<%@ WebService Language="C#" Class="WebService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]//暴露WebService中方法给客户端
public class WebService : System.Web.Services.WebService ...{
[WebMethod]
public void UserLogout(string account)
...{
//由于使用SQL比较麻烦,这里使用Xml作为数据源
//创建一个XmlDocument对象用于操作Xml文档
XmlDocument M_XmlDocument = new XmlDocument();
try
...{
//加载XML文档
M_XmlDocument.Load(Server.MapPath("XMLFile.xml")); //注意:必须为绝对路径,使用相对路径会加载错误。
//创建一个新结点
XmlElement NewXmlElement = M_XmlDocument.CreateElement("UserLogout");
//一种添加属性的方法
//为新结点创建"帐号"属性
XmlAttribute NameAttribute = M_XmlDocument.CreateAttribute("UserName");
NameAttribute.Value = account;
//为新结点创建"注销时间"属性
XmlAttribute LogoutTimeAttribute = M_XmlDocument.CreateAttribute("LogoutTime");
LogoutTimeAttribute.Value = System.DateTime.Now.ToString();
//将"帐号"和"注销时间"两个属性添加到新结点中
NewXmlElement.Attributes.Append(NameAttribute);
NewXmlElement.Attributes.Append(LogoutTimeAttribute);
/**/////另外一种更加简便的添加属性的方法,就下面两句
//NewXmlElement.SetAttribute("UserName", name);
//NewXmlElement.SetAttribute("LogoutTime",System.DateTime.Now.ToString());
//将新结点添加到XML中
M_XmlDocument.DocumentElement.AppendChild((XmlNode)NewXmlElement);
//保存XML文档
M_XmlDocument.Save(Server.MapPath("XMLFile.xml"));//注意:必须为绝对路径,使用相对路径会保存错误。
}
catch (Exception e)
...{
}
}
}
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]//暴露WebService中方法给客户端
public class WebService : System.Web.Services.WebService ...{
[WebMethod]
public void UserLogout(string account)
...{
//由于使用SQL比较麻烦,这里使用Xml作为数据源
//创建一个XmlDocument对象用于操作Xml文档
XmlDocument M_XmlDocument = new XmlDocument();
try
...{
//加载XML文档
M_XmlDocument.Load(Server.MapPath("XMLFile.xml")); //注意:必须为绝对路径,使用相对路径会加载错误。
//创建一个新结点
XmlElement NewXmlElement = M_XmlDocument.CreateElement("UserLogout");
//一种添加属性的方法
//为新结点创建"帐号"属性
XmlAttribute NameAttribute = M_XmlDocument.CreateAttribute("UserName");
NameAttribute.Value = account;
//为新结点创建"注销时间"属性
XmlAttribute LogoutTimeAttribute = M_XmlDocument.CreateAttribute("LogoutTime");
LogoutTimeAttribute.Value = System.DateTime.Now.ToString();
//将"帐号"和"注销时间"两个属性添加到新结点中
NewXmlElement.Attributes.Append(NameAttribute);
NewXmlElement.Attributes.Append(LogoutTimeAttribute);
/**/////另外一种更加简便的添加属性的方法,就下面两句
//NewXmlElement.SetAttribute("UserName", name);
//NewXmlElement.SetAttribute("LogoutTime",System.DateTime.Now.ToString());
//将新结点添加到XML中
M_XmlDocument.DocumentElement.AppendChild((XmlNode)NewXmlElement);
//保存XML文档
M_XmlDocument.Save(Server.MapPath("XMLFile.xml"));//注意:必须为绝对路径,使用相对路径会保存错误。
}
catch (Exception e)
...{
}
}
}
执行后XML文档显示如下:
<?xml version="1.0" encoding="utf-8"?>
<UserLogoutList>
<UserLogout UserName="dreamjhy" LogoutTime="2007-12-25 19:43:08" />
</UserLogoutList>
<UserLogoutList>
<UserLogout UserName="dreamjhy" LogoutTime="2007-12-25 19:43:08" />
</UserLogoutList>
- 异步通信实现捕捉客户注销信息
- AJAX实现异步通信
- 实现异步通信
- ajax实现异步通信
- 实现异步通信
- AJAX 实现异步通信
- 实现客户信息显示和添加
- epoll实现服务端异步通信
- 原生Ajax实现异步通信
- C# socket异步通信实现
- JavaScript Ajax实现异步通信
- 使用Fetch实现异步通信
- C# SocketAsyncEventArgs 实现异步通信
- delphi异常信息捕捉
- CatchLog log信息捕捉
- MySQLdb捕捉警告信息
- 基于TCP协议实现客户服务器的全双工通信
- Linux C UDP Socket实现客户与服务器简单通信
- 注意:金山毒霸最新更新可能会导致win2003无法远程登陆
- Linux那些事儿之我是Block层(10)scsi命令的前世今生(四)
- C++ Primer中文版读书笔记
- UML一点基础知识[图]
- Hibernate性能调优
- 异步通信实现捕捉客户注销信息
- 用库函数stdarg.h实现函数参数的可变
- 操作系统开发--环境设置(bochs,x86)
- 静态库编译和连接遇到的奇怪问题
- 看BBC研究大脑的科教片中“放松产生灵感”的笔记
- C语言可变参数函数实现
- 范例解说Java里的线程概念与线程同步技术
- 重载CListCtrl::DrawItem
- 关于《C#程序设计第4版》一书中发现的错误