1. 综述
开发程序的时候,通常我们是在Visual Studio 里测试,默认使用的是Visual Studio Development Server(Cassini),使用这个可以让我们开发测试工作更容易,但是在IIS上可能不一定能够正常工作。所以,结果可能是在Visual Studio 里运行正常,但是一旦部署到IIS上就会出错。
你可以通过下面一些方法来测试确保你的程序没问题:
- 开发的时候,使用IIS Express或者正式版IIS代替默认的Visual Studio Development Server来测试程序,这样可以更能确保在IIS下少出问题。但是这个方法不能测试你的部署流程是否正确,或者验证部署结构。
- 部署程序到你的开发机上的IIS,然后用同样的步骤部署到生产环境,这样验证你的部署流程和是否能在生产环境运行成功。
- 部署到和生产环境接近的测试环境,由于生产环境是第三方的提供商,所以最理想的测试环境就是提供商开放第二个账户(仅用于测试目的),这样就可以和正式的生产环境使用一样的部署步骤了。
本章节演示的是第二种方式,第三种方式可以在第七章尾部讲到,另外本章节的底部有第一种方式需要用的资源连接地址。
提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。
2. 配置程序运行在Medium Trust上
安装IIS和部署之前,我们需要修改Web.config文件以便配置更能接近共享主机环境。主机提供商通常会让你的程序运行在medium trust级别上,那就是说有些事情是不允许做的,比如你不能访问注册表或者你程序之外的目录读写文件。本机默认情况下是运行在high trust上,也就是有些你可以做的事情在生产环境上可能做不到了。因此,为了确保部署到生产环境没问题,需要将测试环境的运行配置也改成medium trust。
在Web.config文件里,在system.web元素节点里添加<trust>元素,像下面一样:
<configuration>
<!-- Settings -->
<system.web>
<trust level="Medium"/>
<!-- Settings -->
</system.web>
</configuration>
现在程序可以运行在medium trust上了,这样你可以尽早发现需要high trust才能运行的错误了。
3. 安装IIS和Web Deploy
你必须先安装IIS和Web Deploy 才能将程序部署到你开发机的IIS上。因为默认Windows 7是不安装这些组件的,如果你已经都安装了,那请忽略这个section。
强烈推荐使用Web Platform Installer安装IIS和Web Deploy,,因为会自动安装IIS的推荐配置和自动安装IIS和Web Deploy所需要的依赖软件。
使用Web Platform Installer安装IIS和Web Deploy,请使用下面的连接,如果你曾经安装过其中的一种或者是相关的依赖软件,那Web Platform Installer只会安装剩余的部分。
4. 设置默认的应用程序池为.Net4
安装IIS以后,运气IIS管理器(开始->运行,输入inetmgr,回车),确保默认程序池使用的.NET Framework版本是4。
在连接(Connections)面板,展开server节点选择应用程序池(Application Pools),在右边的面板里,查看DefaultAppPool使用的.NET framework版本是否是v4.0,如果是,请忽略此section。
如果你只能看到2个应用程序池,并且都是.NET Framework 2.0的话,你需要在IIS里安装ASP.NET 4,然后再配置IIS才能使用。
打开一个command prompt窗口,右键选择以管理员身份运行(Run as Administrator),然后运行aspnet_regiis.exe来安装ASP.NET 4到IIS里。使用如下命令:
cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru
上面的命名将会为.NET Framework 4创建2个应用程序池,但默认版本还是v2.0的。因为需要将程序部署到.NET 4的应用程序池上,所以需要修改它们的版本为NET 4。
重新运行IIS管理器,点击应用程序池,重新查看右边的面板,点击DefaultAppPool,然后在操作面板(Actions)里点击基本设置(Basic Settings)。
在编辑应用程序池(Edit Application Pool)对话框里,将.NET Framework version里的项修改成.NET Framework v4.0.30319,然后点击确定(OK)。
现在就可以将程序发布到IIS上了。
5. 发布到IIS
使用Visual Studio 2010和Web Deploy部署有几种方式:
- 使用Visual Studio one-click发布
- 创建部署包,然后使用IIS Manager 管理控制台安装,部署包是一个.zip文件,包含了所有需要部署到IIS上的文件和元数据
- 创建部署包,然后使用命令行安装
前面的章节都提到了这三种方式的Visual Studio自动部署设置方式。本章节用的是第一种。更多使用部署包的信息,可以查看ASP.NET Deployment Content Map。
发布之前,确保你的Visual Studio是运行在管理员模式下(开始菜单,右键Visual Studio 2010,选择以管理员身份运行)。
改变当前active的build配置是Test,你可以从工具栏选择(如下图),或者从编译(Build)菜单里的配置管理器(Configuration Manager)里选择。
Solution Explorer里,右键ContosoUniversity项目,选择发布(Publish),弹出Publish Web对话框。
设置profile名称为"Test",如果没看到文本框,而是看到下拉菜单就选择new ,然后输入新名称。
Service URL里输入“localhost”
Site/application里输入"Default Web Site/ContosoUniversity"
选择上Mark as IIS application on destination。(有些情况不需要部署到IIS上,例如项目本身就不是个web程序,它仅仅包含了一些图片,XML文件等,这种情况就不用选择了,以便不建立IIS程序。)
点击发布(Publish),如果你收到如下信息框,请重新以管理员身份运行Visual Studio。
如果你关掉Visual Studio,例如以后的章节来重新打开它再发布的时候,请务必选择以管理员身份运行,如果不是管理员身份,发布程序不会提示出错框而是尝试发布,有时候可能会提示一个没有权限的错误信息。
如果是运行在管理员模式下,Output窗口会显示编译和发布成功的信息。
运行IIS管理器,在连接(Connections)面板里,你可以在默认站点(Default Web Site)下看到一个名字为ContosoUniversity的应用程序,如果之前都打开了IIS,你点击刷新(Refresh)。在操作(Actions)面板点击浏览(Browse *:80 (http))来验证是否可以打开你的首页。
不出错的话,浏览器就会显示Contoso University项目的首页了。
6. 在测试环境中测试
打开浏览器访问http://localhost/ContosoUniversity,重新运行首页,可以看到页面顶部显示的标示符是"(Test)"而不是"(Dev)"了,这就意味着Web.config的transformation结果是正确的。
打开Students页面验证部署的数据库里布包含任何students:
打开Instructors页面验证这些数据依然存在于数据库中:
在Students菜单里选择Add Students,添加一个student,然后可以看到Students 页面显示了一个student,说明已经成功保存到数据库里了:
从Courses菜单,选择Update Credits,因为该页面需要administrator权限,所以跳转到了Log In页,输入administrator账户信息("admin" 和 "Pas$w0rd")登录以后, Update Credits就显示了,这就验证了上个章节创建的administrator账户已经正确的部署到测试环境了。
检查Elmah文件夹是否存在并且值包含一个placeholder文件,这就验证了前面章节设置的忽略部署该文件夹的XML文件执行成功了。
打开C:\inetpub\wwwroot\ContosoUniversity 目录下的Web.config文件验证Code First数据库初始化参数值为Disabled:
现在,你成功将程序部署到你开发机的IIS上并且测试了,这验证了部署流程不仅仅只是copy程序内容(也可以排除不需要部署的内容了),另外Web Deploy也成功配置了IIS站点。下一章节你将测试另外一个还没搞定的部署任务:设置Elmah文件夹的写权限。
7. 更多信息
关于在Visual Studio 里运行IIS或IIS Express的更多信息,请查看下面列出的资源:
- IIS Express Overview
- Introducing IIS Express
- How to: Specify the Web Server for Web Projects in Visual Studio.
- Core Differences Between IIS and the ASP.NET Development Server
- Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds
该帖提供了很多例子解释为什么使用Visual Studio Development Server (Cassini)测试不如使用IIS Express测试可靠,以及为什么在IIS Express里测试没有在IIS正式版里测试可靠的原因.
关于Visual Studio 2010里的自动化部署工具以及关于one-click发布和部署包更多的信息,请访问:ASP.NET Web Application Project Deployment Overview。
关于主机提供商将程序运行在medium trust有可能引起的问题,请访问:Hosting ASP.NET Applications in Medium Trust。
总目录更新地址:点击访问