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 ...
随机推荐
- Android Device Monitor工具的使用
在最新的Android Studio3.x版本中,已经去掉了Android Device Monitor工具,但是不代表Android Device Monitor工具就不能用了,找到sdk的目录: ...
- 微信小程序 - 提示消息组件
配置挺简单的,也就不说明了,点击下载:alert
- 微信小程序 - 自定义tabbar(组件)
配置项(关于使用组件) index.wxml <!-- tabBar:tabBar配置 activeIndex: 激活页面下标 slots: 多插槽配置(需与页面一致) --> <t ...
- 算法笔记_220:猜算式(Java)
目录 1 问题描述 2 解决方案 1 问题描述 看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个 三位数. 如果没有限定条件,这样的例子很多. 但 ...
- tcp线程聊天
.ServerThread package serverclient; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- PhoneGap开发的android项目环境搭建简单流程
首先已经下载好最新的PhoneGap源代码. 已经装eclipse,android sdk及adt的安装和配置. 1.进入eclipse界面,新建android工程 new > androi ...
- 分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
自己在google code中开源了自己一直以来做的两个自动化的框架,一个是针对QTP的一个是针对Selenium的,显而易见,一个是商业的UI automation工具,一个是开源的自动化工具. 只 ...
- 关于.NET编程中各种事务的实现
从数据库事务开始 在很早的以前,我们要实现一个事务通常是基于SQL的数据库事务,一般的通过SQL查询语言来实现,如下所示,同时更新两本书的价格: BEGIN TRANSACTION UPDATE tb ...
- Android开发之底部导航栏标准
以下是封装的库源码: package com.example.oldtab; import java.util.ArrayList; import android.content.res.Resour ...
- ROS中发布IMU传感器消息
下面使用SYD Dynamics的9轴AHRS(Attitude and heading reference system),来发布sensor_msgs/Imu类型的消息. 将传感器用USB转串口接 ...