网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Asp.Net使用POST方法最简单的实现.
.如何在web.config中建立公用的的.
.ASP.NET2.0中的AccessDataSource.
.使Div内内容可编辑.
.慎用url重写 .
.asp.net css注释的影响.
.ASP.NET 2.0“插件”说.
.使用ASP.NET AJAX框架扩展HTML M.
.ASP.NET AJAX正式版带来的Valida.
.ASP.NET设计网络硬盘之两重要类.
.ASP.NET 2.0中CSS失效解决方案.
.在IIS与.net框架中配置中把扩展名.
.使用asp.net进行多关键字查询的例.
.Asp.net &C#开发中的一些注意事项.
.ASP.NET 2.0 Treeview Checkboxe.
.怎样从ASP.NET 2.0中读取连接字符.
.ASP.NET中水晶报表的使用.
.ASP.net生成文字图片.
.在ASP.NET中防止注入攻击[翻译] .
.ASP.NET 2.0高级数据处理之冲突检.

如何保证web app中的Send Email线程稳定性

发表日期:2005-7-24


在asp.net forums2 或者 cs 系统中,  每过几分种会发送一次email, 但是如果在执行时,数据库服务器重启。

会导致Send Email 线程死掉。

参考代码:
private void ScheduledWorkCallbackEmailInterval (object sender)
{
   try {
    // suspend the timer while we process emails
    emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );

    // Send emails
    //
    Emails.SendQueuedEmails( (HttpContext) sender);


    // Update anonymous users
    //
    Users.UpdateAnonymousUsers( (HttpContext) sender);

   }
   catch( Exception e ) {
    ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "Scheduled Worker Thread failed.", e );
    fe.Log();
   }
   finally {
    emailTimer.Change( EmailInterval, EmailInterval );
   }
        }

 

事实上,代码:emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );

不够强壮,理论上讲,如果在执行中出错,会执行:

finally {
    emailTimer.Change( EmailInterval, EmailInterval );
   }


但,事实上,如果是数据库服务器重启,则可以让timer线程永远死掉。

手工解决方法:  重启这个web app

或者改写代码:emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );

为:emailTimer.Change( EmailInterval  * 2, EmailInterval ); 

可以解决


其他参考:

msdn:

System.Theading.Timer.Change API:

上一篇:.NET环境下几种不同的邮件发送解决方案 人气:10234
下一篇:关于用ASP.Net识别远程主机服务器种类 人气:9286
浏览全部asp.net的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐