.aspx文件在服务器端执行对吗,ASP.net 页面被关闭后,服务器端是否仍然执行中?...

ASP.net 页面被关闭后,服务器端是否仍然执行中?

更新时间:2008年08月12日 22:21:02   作者:

当一个正在执行中的ASPX页面执行到一半的时候,浏览器中你关闭了这个页面,服务器端对应的这个页面的代码仍然在执行么?

问题:当一个正在执行中的ASPX页面执行到一半的时候,浏览器中你关闭了这个页面,服务器端对应的这个页面的代码仍然在执行么?

答案:除非你代码里面做了特殊判断,否则仍然正在执行。

注意点:

1、客户端显示页面的时候,后台已经执行完了的页面对象早已经不存在了。当然这时候谈不上服务器段执行不执行的问题了。

2、页面还没有返回,处于等待状态的时候。关闭ASPX页面,才会涉及到上面提到的服务器端仍然在执行的情况。

3、客户端关闭的时候根本不向服务器发送指令。

4、除非你代码里面做了特殊判断,这里的特殊判断指用 if(!Response.IsClientConnected) 来检测状态而用代码终止运行。

下面的简单代码就是演示关闭页面后,看是否仍然在执行?

你可以在这个页面打开后, 还没有返回任何信息的时候把这个页面关闭,然后看指定目录下是否有对应文件被创建并填写内容。

protected void Page_Load(object sender, EventArgs e)

{

StringBuilder txt = new StringBuilder();

txt.AppendLine();

txt.AppendLine(DateTime.Now.ToString("u"));

txt.AppendLine("asvd");

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

Thread.Sleep(50000);

txt.AppendLine(DateTime.Now.ToString("u"));

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

// 把一些信息写到另外一个文件,借此察看是否正在运行

string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");

if (!Directory.Exists(dir))

Directory.CreateDirectory(dir);

DateTime dt = DateTime.Now;

string shortfileName = string.Format("errors_{0:0000}{1:00}{2:00}.log", dt.Year, dt.Month, dt.Day);

string fileName = Path.Combine(dir, shortfileName);

StreamWriter sw;

if (File.Exists(fileName))

sw = File.AppendText(fileName);

else

sw = File.CreateText(fileName);

sw.Write(txt.ToString());

sw.Close();

sw = null;

}

作了特殊判断的情况简单例子:

注意: IsClientConnected 的判断在 VS.net 开发工具自带的开发站点 ASP.NET Development Server  是不支持的。 ASP.NET Development Server 永远返回 true 。

IIS 才是支持的。

protected void Page_Load(object sender, EventArgs e)

{

StringBuilder txt = new StringBuilder();

for (int i = 0; i 

{

if (this.Response.IsClientConnected)

{

txt.AppendLine();

txt.AppendLine(DateTime.Now.ToString("u"));

txt.AppendLine(i.ToString());

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

Thread.Sleep(500);

}

else

{

Response.End();

return;

}

}

txt.AppendLine(DateTime.Now.ToString("u"));

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

// 把一些信息写到另外一个文件,借此察看是否正在运行

string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");

if (!Directory.Exists(dir))

Directory.CreateDirectory(dir);

DateTime dt = DateTime.Now;

string shortfileName = string.Format("errors_{0:0000}{1:00}{2:00}.log", dt.Year, dt.Month, dt.Day);

string fileName = Path.Combine(dir, shortfileName);

StreamWriter sw;

if (File.Exists(fileName))

sw = File.AppendText(fileName);

else

sw = File.CreateText(fileName);

sw.Write(txt.ToString());

sw.Close();

sw = null;

}这个例子中是发现中断,就抛弃之前做的任何东西。

当然我们也可以简单的修改上述代码,让把已经处理完成的东西记录下来,类似下面的代码

protected void Page_Load(object sender, EventArgs e)

{

StringBuilder txt = new StringBuilder();

for (int i = 0; i 

{

if (this.Response.IsClientConnected)

{

txt.AppendLine();

txt.AppendLine(DateTime.Now.ToString("u"));

txt.Append("**********  ");

txt.AppendLine(i.ToString());

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

Thread.Sleep(500);

}

else

{

break;

}

}

txt.AppendLine(DateTime.Now.ToString("u"));

Response.Write(DateTime.Now.ToString("u"));

Response.Write("
\r\n");

// 把一些信息写到另外一个文件,借此察看是否正在运行

string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");

if (!Directory.Exists(dir))

Directory.CreateDirectory(dir);

DateTime dt = DateTime.Now;

string shortfileName = string.Format("errors_{0:0000}{1:00}{2:00}.log", dt.Year, dt.Month, dt.Day);

string fileName = Path.Combine(dir, shortfileName);

StreamWriter sw;

if (File.Exists(fileName))

sw = File.AppendText(fileName);

else

sw = File.CreateText(fileName);

sw.Write(txt.ToString());

sw.Close();

sw = null;

}需要注意的是, 使用 isClientConnected   是要占用一定的系统资源的。

isClientConnected   实际上需要向客户端输出一点东西,然后才知道客户端是否仍然在线。

这样,除非你的应用非常耗时,否则建议你不要用 isClientConnected   。 免得判断 isClientConnected   使用的资源比你实际业务逻辑使用的资源还要多。

在任何情况下, Response.IsClientConnected 都要有些开销,所以,只有在执行至少要用 500 毫秒(如果想维持每秒几十页的吞吐量,这是一个很长的时间了)的操作前才使用它。作为通常的规则,不要在紧密循环的每次迭代中调用它,例如当绘制表中的行,可能每  20 行或每 50 行调用一次。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了.net实现动态验证码功能,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-04-04

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要介绍了.NET实现魔方游戏(一)之任意阶魔方的表示 的相关资料,需要的朋友可以参考下2016-02-02

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了.NET中的枚举用法,分析了枚举的定义、转换、判定等常见用法,需要的朋友可以参考下2015-01-01

4f96a78db829b1556ff16de21e013c7a.png

使用HtmlAgilityPack XPath表达式来抓取博客园数据使用WebClient 下载数据,HtmlAgilityPack XPath表达式解析数据,并绑定到Repeater控件2011-12-12

8cc1031babc6aff2319f1c6af8544aa0.png

本篇文章主要对asp.net创建事务的方法进行实例介绍,具有很好的参考价值,需要的朋友一起来看下吧2016-12-12

0c932a99bb7b6f23c937db507070cc7b.png

这篇文章主要为大家详细介绍了ASP.NET MVC下拉框联动实现方法,感兴趣的小伙伴们可以参考一下2016-07-07

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章介绍了ASP.NET弹出日历功能的实现方法,有需要的朋友可以参考一下2013-07-07

2d9f31f2af7b675a3d153d2b7f1035a7.png

合并单元格 合并某一行的所有列2008-12-12

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了Asp.Net程序目录下文件夹或文件操作导致Session失效的解决方案,需要的朋友可以参考下2017-06-06

f4838ec7e2d4da28e0b57d4e852dadd4.png

这篇文章主要介绍了asp.net中c#自定义事件的实现方法,较为详细的分析了自定义实现的各个步骤的具体实现思路与技巧,并给出了一个完整的实例总结,具有一定的参考借鉴价值,需要的朋友可以参考下2014-12-12

最新评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值