定时发布任务,在global.asax中获取文件的物理路径的方法
如果要把一个相对路径或者虚拟路径映射道服务器的物理路径,通常会使用Server.MapPath()函数,比如将根目录下的html目录映射为物理路径:Server.MapPath("html"),可以返回形如"E:\www\htm\"的字符串。通常情况下我们都不会遇到什么问题。
新手常常会发现在诸如自己的类文件中无法使用Server.MapPath(),这是由于没有引入相应的命名空间,只要把全名写出来,即用System.Web.HttpContext.Current.Server.MapPath(),问题就迎刃而解了。
最近老板让我做一个可以定时发布文章的CMS,他的意思是做一个网站,但是他不想管理这个网站,只是想一个月来管一次,但是又要保持网站每天更新(真是够懒的,想得还真美)。就是说网站每天会自己更新,多么好的网站啊。这里面我首先想到的是使用定时器,但是web程序是相当被动的,只有当用户请求时,它才会工作,这个问题困扰了我很久。
不过还好,几经周折才找到可以在global.asax中实现这种功能,该文件是一个网站应用程序可选的全局文件,定义了有很多事件,其中的Application_Start()函数可以在整个网站应用程序启动时被触发,因此我就在这里触发一个定时器,通过这个定时器不断触发我的定时发发布函数。
定时发布功能我做到了一个类里面,类里面用到了Server.MapPath(),但是这个类真的好奇怪,我在其他地方调用时都可以工作正常,但是在global.asax中调用是老是在MapPath()一行提示“未将对象引用设置到对象的实例”的错误。弄了N久也没有结果,郁闷至极,上网搜了N久,又到百度知道中花了200分悬赏也没有得到答案,千篇一律的给出使用Server.MapPath(),而这是根本不行的。
经过钻研,发现原来在global.axax中并没有请求上下文,因此System.Web.HttpContext是Null,更不要说使用其成员了,所以这条路是走不通了。难道就没有其他获取物理路径的方法了吗?又是一番周折,我发现了HttpRuntime这个神奇的类,它并不需要请求上下文,而它恰好有一个熟悉AppDomainAppPath,给出了当前应用程序的根目录,有了这个东西,加上我已知的虚拟路径不久得到了我相应的文件的物理路径了吗。试了一下,果然实现了,呵呵,一个困难又被我解决了。
总结一下:如果没有请求上下文System.Web.HttpContext就是空值,自然不能实现任何功能。如果想在这种情况下得到物理路径可以使用HttpRuntime.AppDomainAppPath获取应用程序的物理根目录,有了这个根目录就可以获取所有文件的物理路径了。
本文摘自:左正
定时发布任务,在global.asax中获取文件的物理路径的方法的更多相关文章
- Asp.Net Core 中获取应用程序物理路径(Getting the Web Root Path and the Content Root Path in ASP.NET Core)
如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...
- [转] ASPNET Core 中获取应用程序物理路径
如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...
- .Net Core api 中获取应用程序物理路径wwwroot
如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...
- 在HTML页面中获取当前项目根路径的方法
在HTML页面获取项目根路径的方法: function getRootPath(){ var curPageUrl = window.document.location.href; var rootP ...
- [C#]中获取当前程序运行路径的方法
获取当前程序运行路径: ①//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集.string str = System.AppDomain.CurrentDoma ...
- webapi中取文件的物理路径(server.mappath)
在Webapi中是用不了server.mappath方法的,上网搜索了一下,发现是用如下代码取得文件绝对路径: string logpath = System.Web.Hosting.HostingE ...
- Weblogic web应用中获取文件的绝对路径
注意点: 1. file必须在/下,或者/WEB-INF/,不能在classes下 2. weblogic中进行如下配置,以获取绝对路径: <wls:container-descriptor&g ...
- 【转】VC中获取文件的相对路径和绝对路径
原文网址:http://www.360doc.com/content/13/0703/16/3402399_297386231.shtml
- Global.asax中的操作数据库代码无法执行
本人最近在做一个基于Access数据库的Web应用程序,为了实现一个定时更新数据库的需求,我在Global.asax中的Application_Start函数里写了个计时器, void Applica ...
随机推荐
- Lucene.net入门学习系列(2)
Lucene.net入门学习系列(2) Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 在使用Luce ...
- hdu 4277 USACO ORZ (dfs暴搜+hash)
题目大意:有N个木棒,相互组合拼接,能组成多少种不同的三角形. 思路:假设c>=b>=a 然后枚举C,在C的dfs里嵌套枚举B的DFS. #include <iostream> ...
- A*算法&博弈树α-β剪枝
A*算法&博弈树α-β剪枝 A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在 ...
- Codeforces Round #193 (Div. 2)
题目地址: http://codeforces.com/contest/332 第一题:题目又臭又长,读了好长时间才读懂. n个人,你是0号,从0开始到n-1循环做动作,只要你前面三个人动作一样,你就 ...
- mysql基础:数据库的创建,增删改查
=============查看数据库========================== 使用SHOW语句找出服务器上当前存在什么数据库: mysql> SHOW DATABASES; +--- ...
- [转] 数据库加锁 sql加锁的
[导读: 各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别.SQL Server更强调由系统来管理锁.在用户有SQL请求时,系统分析请求,自动在满足锁定条件和系统性能之间为数据库加上 ...
- 设计模式 -- 亨元模式(FlyWeight Pattern)
用来尽可能减少内存使用量,适用于存在大量重复对象的场景,达到对象共享,避免创建过多对象的效果,提升性能,避免内存溢出. 定义: 使用共享对象有效支持大量细粒度对象. 适用场景: 系统中存在大量相似对象 ...
- Python 3
#对于任意可迭代对象可使用序列拆分操作符*进行拆分 #可用iterable对分片进行赋值等操作(相当于del分片并把iterable插入其中,所以二者长度可以不同) #del取消对象引用与数据项之间的 ...
- Python 调用shell
第一种,os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回.返回值是依赖于系统的,直接返回系统的调用返回 ...
- 动态网站加速,cdn义不容辞
"双十一"大战已经落下帷幕,各大电商纷纷拿出了亮眼的成绩单,但在这些成绩单的背后,CDN加速技术是功不可没的.随着互联网的发展,电商.视频直播等网站的火热,以及各个云加速平台的流行 ...