在cs文件中写如下代码:
bool Istrue = true;
int i = 0;
while (Istrue)
{
i++;
if (Response.IsClientConnected)
{
BusinessBase.Common.Error.LogText("写日志:" + i);//写日志代码...
System.Threading.Thread.Sleep(1000);
}
else
Istrue = false;
}
问题,只要打开过这个页面,日志就会一直写下去。就算页面关闭了,还是会写下去。
请问如何可以实现,当页面打开时一直写日志,而页面关掉就停止写。
是否代码写得有问题,请大神指教一下,谢谢啦
看来的确没什么好办法。
不过我很疑惑。Response.IsClientConnected这个到底有什么用,看它说明不是说“指示客户端是否关闭”吗?为什么这里完全没用?
没人来详细解说一下Response.IsClientConnected吗? 解说完毕就结贴了
打开页面,可以开始写,但是,关闭这个页面的时候,服务器是不知道的。除非 设置一个时间段,一段时间不访问这个页面,就认为是关闭了。
app_start app_end session_start session_end
这个只能是 对于一个网站的监控,而对于页面却是无能为力。
Http是一次请求和回应的过程.web开发,要分清服务端和客户端.
正常情况位于美国的Google服务器是不知道你在中国的浏览器上打开的Google页面关闭的.
一定要实现这个需求可以在客户端页面的关闭事件中发出Ajax请求去关闭写日志的功能.
我的理解是如果服务端没有响应完,那么IsClientConnected就是true.
Response如果End了,那么IsClientConnected就会是false.
把Isture声明为全局静态变量,在客户端关闭页面前发送一个请求到服务器修改Istrue为false.
放在全局事件里试试。如:
app_start app_end session_start session_end
bool Istrue = true;
int i = 0;
if (Response.IsClientConnected)
{
while (Istrue)
{
i++;
if (Response.IsClientConnected)
{
BusinessBase.Common.Error.LogText("写日志:" + i);//写日志代码...
System.Threading.Thread.Sleep(1000);
}
else
Istrue = false;
}
}
else
{
//执行其他操作
}
试试看,未测试
要么在关闭前向服务器发送一个Ajax请求,要么客户端的页面在打开之后每隔一小段时间向服务器发送表明自己处在活动状态的Ajax请求,服务器端轮询客户端的状态,没处在活动状态的作相应处理,实时程度取决于那个间隔。