找回密码
 立即注册
首页 业界区 业界 如何在IIS6,7中部署ASP.NET网站

如何在IIS6,7中部署ASP.NET网站

皮仪芳 2025-5-29 16:06:48
在我的第一篇博客中,我发布过一个示例项目,主要演示了我的我的AJAX框架和我的通用数据访问层。虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档,但在发布后的将近一年的时间里,还是有不少人给我发邮件,问我一些关于不能运行示例的问题。在所有问题中,主要集中在IIS和SQL SERVER的配置方面。因此,我认为还是有必要再来谈一下在IIS6/7以及SQL SERVER中部署ASP.NET网站的过程了。
在上篇博客【写自己的ASP.NET MVC框架(下)】中,我又发布了一个示例项目,它也包含一个网站项目,今天的介绍过程将主要以这个示例为主。对于以前的示例所需配置的相同部分将不会重复介绍,不同点则会额外补充。
查看web.config文件

ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外)。要想运行它,通常需要一些配置过程。
但是,我们到底需要配置什么呢?
答案是:查看web.config
web.config通常会放在网站的根目录,这个文件中包含了一最重要的网站运行参数。比如:connectionStrings,httpHandlers,httpModules ,这些参数都是网站开发人员认为运行网站所必需的参数。因此,如果我们想将一个网站部署到IIS中,必须首先打开web.config文件,逐个确认这些重要的参数是否符合要求。
这里要补充一点的是:有些开发人员喜欢将各类参数放在appSettings配置节中,即便是数据库的连接字符串也放在appSettings中。我只能说:这是个很不好的习惯。因此,在部署这类网站时,可能还要注意一下appSettings是否包含数据库的连接字符串,这就需要人工识别了。当然了,appSettings中还可能包含一些重要目录配置,同样,也只能人工识别了。
今天要讲述的参数主要涉及到IIS和SQL SERVER,因此本文将会分开介绍它们。
而且IIS还会分为6和7.5二个版本来单独演示。
SQL SERVER则以 2005 Express版本来演示。
我演示所用的操作系统为:Windows Server 2003和Windows 7 ,它们分别附带了IIS 6和IIS 7.5
说明:通常我们在部署网站时,都应该先根据web.config定义的那些重要参数来配置网站。但为了让您能对这些参数有较深刻的印象,下面的演示中,不是先根据web.config来配置网站,而是采用【从创建一个站点后,一步一步地发现问题并解决】的方式来讲解这个过程。
在IIS中创建网站

每个ASP.NET程序都是一个网站,要想运行它们,都需要在IIS中部署它们,部署的第一步就是要在IIS创建一个网站。在IIS中创建网站的过程比较简单,因为IIS都提供向导界面来帮助我们完成这个配置过程,因此,本文打算省略那些无意义的贴图。
说明,我们先从IIS6开始。这里只要求您在IIS中创建一个网站,把它配置成网站就可以了,其它的配置我们后面再谈。
示例项目:点击此处进入 MyMVC DEMO 下载页面
网站创建好了吗?我停下来等一下吧。

我的网站配置好了,现在已经可以用浏览器访问它。
1.png

现在我们可以切换风格来试试效果,点击页面右上角的【3】试试看。
噢,怎么一开始就出错了:
2.png

看到这个提示,不要茫然。为了界面友好,我用JavaScript捕获了这个错误,但现在我们需要知道错误的原因是什么,怎么办呢?
有FireBug或者Fiddler2吗?
如果有,就打开它们吧。下图是我用FireBug看到的错误原因(需要重新执行刚才的操作):
3.png

从FireBug中,我们可以看到,刚才的操作触发了一次请求,请求的地址是:/AjaxStyle/SetStyle.cspx
cspx是个什么扩展名呢?还是打开web.config看一下吧。
  1. <httpHandlers>
  2. <httpHandlers>
  3.    
  4. </httpHandlers>
  5. <httpHandlers>
  6.    
  7. </httpHandlers>
  8. <httpHandlers>
  9.    
  10. </httpHandlers>
  11. </httpHandlers>
复制代码
在web.config中,网站要求配置的一些httpHandlers中,第一个便是针对【cspx】扩展名的。
这里我要解释一下【cspx】这个扩展名了。在以前的示例中,我选择了【cs】这个扩展名表示一个AJAX调用,但是,后来发现很多人在IIS中部署中遇到问题了(原因后面再说)。于是,这次我换了个扩展名。然而,又有人问我:cspx, 是不是写错了? 或许他认为应该是【aspx】才对。
这个问题我用邮件回答过多次了,今天用博客的形式再回答一次:
取什么扩展名都不重要,我只要选择没有用过的扩展名来区分是AJAX调用就可以了。我也可以取【fish】来做为AJAX请求地址的扩展名,只是担心一些人认为俗气而已。
IIS6 添加扩展名映射

回到IIS,在网站节点上,右击,从弹出的菜单中,选择【属性】,然后在弹出的对话框中,选择【主目录】选项卡,并点击【配置】按钮。此时的界面应该是这样的:
4.png

找到【ascx】这个扩展名,双击它,是不是弹出下面这个对话框?
5.png

照着图片的操作去完成:复制【可执行文件】的设置路径。然后点击【取消】关闭对话框。
此时将回到【应用程序配置】对话框,点击【添加...】按钮,
6.png

照着图片操作吧。对话框中的【可执行文件】的参数,此时已在Windows剪切板中,现在只要粘贴就可以了。
全部【确定】,关闭所有对话框,再回到浏览器,然后再试一次。
现在可以操作了吧?


先不要点击其它链接,还是来对刚才的操作做个小结吧。
在ASP.NET中,有时候我们可能会需要创建自己所需的HttpHandler来处理一些特殊的请求。
我的MyMVC框架就有这个需求:将AJAX请求与页面的请求分开来处理。
所以我们需要一些特殊格式的URL。通常选择一个没用过的扩展名会比较方便,因此我选择了 cspx
为了能告诉ASP.NET将以下格式的ULR映射到AjaxHandlerFactory
  1. /Fish.AA.AjaxTest/Add.cspx
  2. /Fish.BB.AjaxTest.Add.cspx
  3. /Fish/BB/AjaxTest/Add.cspx
  4. /AjaxDemo/GetMd5.cspx
  5. /AjaxDemo.GetMd5.cspx
复制代码
我就需要在web.config中注册这种URL模式,并且为了能最好的匹配这些URL,我可以使用下面的配置:
  1. <httpHandlers>
  2.    
  3. </httpHandlers>
复制代码
我们可以用Visual Studio自带的WebDev.WebServer.EXE来运行网站程序。
本来,这一切都是很完美的。
可是,IIS中并不支持这么复杂的path设置,它只能支持简单的扩展名映射。
所以,我也只好使用简单的扩展名:【.cspx】来向IIS注册。
我再来解释一下,为什么在ASP.NET中,前面那个path能够识别我上面所说的5种格式的URL?
在ASP.NET管线的处理器映射阶段,ASP.NET会将【*Ajax*/*.cspx,*Ajax*.*.cspx】转换成下面的正则表达式,再来检查每个请求的URL是否匹配。
[code](?:\A|(?
您需要登录后才可以回帖 登录 | 立即注册