ASP.NET项目在IIS上使用虚拟目录
在IIS中,应用程序与虚拟目录特别容易混淆,但两者又是完全不同的概念. 应用程序是一个逻辑边界,这个边界可以分隔网站及其组成部分。虚拟目录则是一个真实的指针,这个指针指向了一个本地或远程的物理路径。虚拟目录总是存在于应用程序之中,一个应用程序可以包括多个虚拟目录。
1. 应用程序:
一般情况下,一个应用程序就是一个网站(但不是所有情况),而应用程序中如果再创建应用程序,那么它就是这个网站的子应用,比如我们常见的,前台用户浏览功能与后台管理功能,这样我们可以分成两个子应用,不过我们也可以通过应用程序框架来实现此功能,而并不一定是依赖于IIS应用程序功能,IIS中应用程序的存在意义大概也就如此了吧。
2. 虚拟目录:
虚拟目录的存在意义,我们可以理解为分布式的一种实现手段。说到虚拟目录,我们有必要引出物理路径的概念。物理路径是磁盘上实际存在的路径,而虚拟目录是物理路径的指针,相当于快捷方式。有了虚拟目录功能,我们就可以将网站的组成部分放在我们想放的任何地方,而不只局限于我们创建网站应用程序的磁盘。
如果没有虚拟目录,假如我们在D盘创建了个网站,那么这个网站所有的组成部分,比如图片,程序代码,模板文件,有的甚至有视频文件,这些目录和文件都只能在D盘的这个网站目录下,这样网站应用才可以运行。而有了虚拟目录功能,我们可以用虚拟目录指向其它盘符,或者是指向一个网络路径,这样网站的组成部分就不局限于网站应用所在的磁盘,实现了文件分布式存储,也突破了磁盘容量上限的瓶颈。
在IIS中,应用程序是可以选择应用程序池的,这说明其是一个独立的整体,虽然我们有时给应用创建子应用,但它并不依赖父应用,而是独立的。而虚拟目录是不可以选择应用程序池的,这也说明了它是应用程序的组成部分。
3. 例子:
做一个图片展示类的网站,或者其他需要用户上传文件的网站,需要将用户上传的文件保存到一个Uploadfiles文件夹下,一般我们在做项目时用户上传的文件都是保存在网站项目的同目录下,而考虑到随着网站的逐渐运行,这个Uploadfiles文件肯定会越来越大。所以,考虑到这一点,我就想能不能实现将这个Uploadfiles文件夹放在其他的磁盘目录下,比如网站项目放在服务器C盘下,而Uploadfiles文件夹放在D盘下。
开始考虑用虚拟目录来实现,但是又担心项目中在使用该目录时会出现找不到目录的问题。后来测试发现需要注意一个地方,就不会报错了。
网站项目:
Default.aspx页面用于向虚拟目录中写入数据;Web.aspx页面用于读取虚拟目录中的数据。
搭建到IIS中的目录结构:
Upload文件夹为我创建的虚拟目录,引用的是其他磁盘下的一个文件夹。
通过高级设置中可以看到:
说明:
这里为了模拟向虚拟目录中传入数据,用向文本文档中写入数据来测试。
Default.aspx页面中的代码:
protected void Page_Load(object sender, EventArgs e)
{
string path = Server.MapPath("~/Upload/eds.txt"); using (StreamWriter sw=new StreamWriter(path,true))
{
Random r = new Random();
sw.Write("我又加了一条 "+r.Next(0,100)+" <br/>");
}
Response.Write("ok");
}
Web.aspx页面中的代码:
protected void Page_Load(object sender, EventArgs e)
{
string path = Server.MapPath("~/Upload/eds.txt"); using (StreamReader sr = new StreamReader(path, true))
{
Response.Write(sr.ReadToEnd());
}
}
运行,数据就会写入到虚拟目录中了,和真实目录效果一样。
在几次测试过程中出现了一次错误:
这种情况下,将应用程序池由集成模式改为经典模式就能运行了。
测试效果:
写入数据:
显示数据:
ASP.NET项目在IIS上使用虚拟目录的更多相关文章
- [开发笔记]-ASP.NET项目在IIS上使用虚拟目录
说一下我想要实现的效果: 假如我做一个图片展示类的网站,或者其他需要用户上传文件的网站,需要将用户上传的文件保存到一个Uploadfiles文件夹下,一般我们在做项目时用户上传的文件都是保存在网站项目 ...
- 部署网站: 配置项目到iis上运行报目录错误
配置项目到iis上运行报目录错误 以下三种方法可使用: 1.添加文件访问权限 everyone (线上环境慎用) 2.重新注册iis 3.web.config 加一段话 在<system.we ...
- Asp.net MVC 如何向webform一样在IIS里添加虚拟目录
相信很多用webform的程序猿都习惯性的使用虚拟目录的形式来对一个程序添加新的功能,那么在mvc下该如何来弄呢? 首先得有一个项目基层的项目,然后我们在这个项目的基础上新增一个功能模块,例如信息发布 ...
- 记一次asp.net core 在iis上运行抛出502.5错误
asp.net core 在iis上运行抛出502.5异常的部分原因以及解决方案 环境说明 已安装 .net core runtime 2.1.401 已安装 .net core windows ho ...
- 通过发布项目到IIS上,登录访问报系统找不到System.Web.Mvc
我发布项目到IIs,通过IIS的端口来访问直接下面的错误
- 给 IIS Express 配置虚拟目录
使用 vs2015 打开旧项目,之前使用 iis 配置站点,然后在 vs 中附加 w3wp.exe 进行开发和调试的. 由于种种原因 iis 上配置站点各种失败. 之后发现,其实在 vs2015 中按 ...
- IIS 中的虚拟目录 和软连接
在WIndows 中 可以这样设置 mklink /D C:\bb C:\cc 这样 bb 就指向 CC了 bb 在IIS中的目录其实就是虚拟目录 .这样大的文件就不用存放在IIS中了,可以放在其他 ...
- 关于C#mvc用iis发布,虚拟目录的问题。
mvc关于iis发布虚拟目录的问题,解决方法是修改代码中路径的方式,例如ajax中常用的为url:“/Home/Index”,可修改为 url: '@Url.Action("Index&qu ...
- iis express添加虚拟目录
在调试WEB时,还是使用IIS EXPRESS比较方便, 在IIS中,选择网站,右击,添加虚拟目录或者应用程序,就能添加虚拟目录了.. 在IIS EXPRESS中,添加虚拟目录如下 1.右击IIS E ...
随机推荐
- keytab生成不了
vim /var/kerberos/krb5kdc/kadm5.acl 将*e改成* /etc/init.d/kadmin restart 重启kadmin
- 【树莓派】Squid代理以及白名单配置
Squid安装: sudo apt-get install squid3 -y 首先,建议备份一下这个配置文件,以免配错之后,无法恢复,又得重新安装: sudo cp /etc/squid3/squi ...
- 微信小程序 - 组件传值给调用页面
演示如下(可以ctrl+鼠标放大或者下载GIF图片) 1. 先组件定义事件“checkbox”(组件内事件) 2. 调用页面调用它需要加bind:事件名 = 调用页面事件名(bind即绑定调用组件“o ...
- WIP 002- Rating info page design
Please design the screen When Permitted Subdivision selected Yes hide Flood Zone, otherwise show it.
- xampp 教程
xampp教程1 使用安装包进行安装 (目前有三种可供选择下载的XAMPP for Windows: 安装包 简单且安全:XAMPP 的便捷安装程序.) 使用安装包来安装XAMPP是最简单的方法. ...
- Java Runtime.exec
http://www.cnblogs.com/softidea/p/4287519.html http://www.jianshu.com/p/af4b3264bc5d http://yindingt ...
- Linux文件权限与目录
1:文件操作者的身份 owner:创建文件.拥有文件的登录用户. group:同一群组内的用户. others:其他登录用户. [系统账户与密码信息保存在/etc/passwd:个人账户与密码信息保存 ...
- 【DB2】数据迁移
数据迁移概述 在日常生活中常有数据的导入导出,为此db2提出了很多工具可以选择,export.import.load.db2look.db2move.db2dart,如下图所示: a.最上面虚线框部分 ...
- appium日志示例解读
http://www.colabug.com/thread-1048952-1-1.html
- 输出前 k 大的数
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小 ...