关于asp.net的一个问题。

在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;
            }

 

问题,只要打开过这个页面,日志就会一直写下去。就算页面关闭了,还是会写下去。

请问如何可以实现,当页面打开时一直写日志,而页面关掉就停止写。

是否代码写得有问题,请大神指教一下,谢谢啦

白猪掌柜的
浏览 430回答 7
7回答

慕标5832272

打开页面,可以开始写,但是,关闭这个页面的时候,服务器是不知道的。除非 设置一个时间段,一段时间不访问这个页面,就认为是关闭了。 app_start app_end session_start session_end 这个只能是 对于一个网站的监控,而对于页面却是无能为力。

慕虎7371278

Http是一次请求和回应的过程.web开发,要分清服务端和客户端. 正常情况位于美国的Google服务器是不知道你在中国的浏览器上打开的Google页面关闭的. 一定要实现这个需求可以在客户端页面的关闭事件中发出Ajax请求去关闭写日志的功能.

万千封印

我的理解是如果服务端没有响应完,那么IsClientConnected就是true. Response如果End了,那么IsClientConnected就会是false.

繁花如伊

把Isture声明为全局静态变量,在客户端关闭页面前发送一个请求到服务器修改Istrue为false.

一只名叫tom的猫

放在全局事件里试试。如: app_start app_end session_start session_end

慕田峪9158850

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 {         //执行其他操作 } 试试看,未测试

慕婉清6462132

要么在关闭前向服务器发送一个Ajax请求,要么客户端的页面在打开之后每隔一小段时间向服务器发送表明自己处在活动状态的Ajax请求,服务器端轮询客户端的状态,没处在活动状态的作相应处理,实时程度取决于那个间隔。
打开App,查看更多内容
随时随地看视频慕课网APP