如题,先谢过各位了,刚接触,想在Global.asax做个定时检查的功能,但结果是没反映(里面执行的那段代码是测试的,就是往数据库里增加一个记录),代码如下:<%@ Application Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Timers" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web" %><script runat="server">
private System.Timers.Timer myTimer;
protected void Application_Start(Object sender, EventArgs e)
{
//定义定时器
myTimer=new System.Timers.Timer(60000);
myTimer.Elapsed+=new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled=true;
myTimer.AutoReset = true; }
private void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
//这里写需要执行的任务
string TestSMS="test";
string connstr="Provider=Microsoft.Jet.Oledb.4.0;Data Source="+ Server.MapPath(ConfigurationSettings.AppSettings["DBPath"])+";";
OleDbConnection conn=new OleDbConnection(connstr);
conn.Open();
string sql = String.Format("insert into smscheck(TestSMS) values(@TestSMS)");
OleDbCommand updatecomm=new OleDbCommand(sql,conn);
updatecomm.Parameters.AddWithValue("@TestSMS",TestSMS);
updatecomm.ExecuteNonQuery();
updatecomm.Dispose();
conn.Close();
conn.Dispose();
}
protected void Application_End(Object sender, EventArgs e)
{
//下面的代码解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
string url = "http://localhost:82/111.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
}
</script>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Timers" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web" %><script runat="server">
private System.Timers.Timer myTimer;
protected void Application_Start(Object sender, EventArgs e)
{
//定义定时器
myTimer=new System.Timers.Timer(60000);
myTimer.Elapsed+=new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled=true;
myTimer.AutoReset = true; }
private void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
//这里写需要执行的任务
string TestSMS="test";
string connstr="Provider=Microsoft.Jet.Oledb.4.0;Data Source="+ Server.MapPath(ConfigurationSettings.AppSettings["DBPath"])+";";
OleDbConnection conn=new OleDbConnection(connstr);
conn.Open();
string sql = String.Format("insert into smscheck(TestSMS) values(@TestSMS)");
OleDbCommand updatecomm=new OleDbCommand(sql,conn);
updatecomm.Parameters.AddWithValue("@TestSMS",TestSMS);
updatecomm.ExecuteNonQuery();
updatecomm.Dispose();
conn.Close();
conn.Dispose();
}
protected void Application_End(Object sender, EventArgs e)
{
//下面的代码解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
string url = "http://localhost:82/111.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
}
</script>
解决方案 »
- 关于cookie过期问题
- "出错提示: 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误
- DataSet 中的 Relations 建立关系后得不到数据。大虾帮忙
- 可是换行的textbox控件是什么,那位能指点一下,只要可以换行就可以了
- 请教同时安装VS2003和Vs2005???
- 已经将 TextBox控件的属性设置为 EnableViewState="False",为什么仍然可以保存POST数据???
- 请教:关于用VS.NET开发ASP.NET的多人共同开发问题?(急,在线等)
- ----RDS数据控件绑定数据的问题----
- 如何用ASP代码实现网页中的播放器的控制按钮
- 能否对DataRow设置样式属性?
- 问个傻瓜问题,关于上传ASPX到服务器
- aspx如何传值给asp
<%@ Application Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Timers" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web" %> <script runat="server"> protected void Application_Start(Object sender, EventArgs e)
{
//定义定时器
string TestSMS="test";
string connstr="Provider=Microsoft.Jet.Oledb.4.0;Data Source="+ Server.MapPath(ConfigurationSettings.AppSettings["DBPath"])+";";
OleDbConnection conn=new OleDbConnection(connstr);
conn.Open();
string sql = String.Format("insert into smscheck(TestSMS) values(@TestSMS)");
OleDbCommand updatecomm=new OleDbCommand(sql,conn);
updatecomm.Parameters.AddWithValue("@TestSMS",TestSMS);
updatecomm.ExecuteNonQuery();
updatecomm.Dispose();
conn.Close();
conn.Dispose(); } private void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
//这里写需要执行的任务
}
protected void Application_End(Object sender, EventArgs e)
{
//下面的代码解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
string url = "http://localhost:82/111.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
}
</script>
你这里时间是60000,就是1分钟,要等1分钟才执行。Application_Start是第一次访问时候执行,只要没有停止访问该站点,以后重复访问不再执行。你的Application_Start事件在多用户访问时候myTimer会被反复实例化,最好做判断。
{
//定义定时器
myTimer=new System.Timers.Timer(60000);
myTimer.Elapsed+=new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled=true;
myTimer.AutoReset = true; } private void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
//这里写需要执行的任务
string TestSMS="test";
string connstr="Provider=Microsoft.Jet.Oledb.4.0;Data Source="+ Server.MapPath(ConfigurationSettings.AppSettings["DBPath"])+";";
OleDbConnection conn=new OleDbConnection(connstr);
conn.Open();
string sql = String.Format("insert into smscheck(TestSMS) values(@TestSMS)");
OleDbCommand updatecomm=new OleDbCommand(sql,conn);
updatecomm.Parameters.AddWithValue("@TestSMS",TestSMS);
updatecomm.ExecuteNonQuery();
updatecomm.Dispose();
conn.Close();
conn.Dispose();
}这样就没问题,到底原因出在什么地方?还有,楼上的,Global.asax中的Application_Start不是只会运行一次的吗?怎么会重复实例呢?不明白
这个文件是干嘛的。我的网站怎么没有啊?
Application["usercount"] = 0;
//定时器设置
System.Timers.Timer myTimer = new System.Timers.Timer(60000*60*4);//4小时检测一次
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 60000 * 60 * 4;//4小时检测一次
myTimer.Enabled = true;
{
//定义定时器
myTimer=new System.Timers.Timer(60000);
.......
myTimer.Start();
} private void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
myTimer.Stop();
//这里写需要执行的任务
myTimer.Start();
}
System.Threading.Timer 试试.查了一下,据说System.Timers.Timer不太好用.
例如:
<sessionState mode="InProc" timeout="15" cookieless="false"/>
<!--上句是用户加上的-->Application_End才能有效。
把数据库的连接串在Application_Start中拼接好以后通过参数传递给定时器事件,或者把Server.MapPath改成HostingEnvironment.MapPath
就是:“把数据库的连接串在Application_Start中拼接好以后通过参数传递给定时器事件,或者把Server.MapPath改成HostingEnvironment.MapPath”不胜感激啊!
private string connstr;在Application_Start中对其赋值:
connstr = "Provider=Microsoft.Jet.Oledb.4.0;Data Source="+ Server.MapPath(ConfigurationSettings.AppSettings["DBPath"])+";"; 在 myTimer_Elapsed中直接使用它就可以了
注意,如果用这种方法,你的DBPath里必须写绝对路径,就是说必须用毛毛虫开头的"~/xxx/xxx.mdb"这种形式