是不是太快了?刚写了这么一点点小代码就需要发布??
NO,一点也不快。
我们的程序可不是只给我们自己用的,在自己的机器上跑的好好的程序,到别人的机器上就不一定了。
我要马上确认一下,刚开发的程序是不是可用的,如何让别人也能用到。刚刚只是在我自己的机器上运行成功了,看上去是在浏览器里执行了,但我的机器即不是服务器也不是别人的客户端。最终的发布服务器上谁也不会去装一个庞然大物Visual Studio。
此章节详述整个发布服务器建立的过程(从一个纯净的Windows Server 2003开始),以及过程中遇到的问题和如何一步步的排除这些问题。如果只是想要简明扼要的步骤,请直接看文章最末列出的部署ASP.NET WEB应用项目的正确步骤。
找一台纯净的安装了Windows Server 2003操作系统的机器(企业版,R2版都行,最主要的是要纯净的),真实的机器也行,VMWARE的虚拟机里也可以。
让我们来看一下刚刚的一行短短的程序如何在真实的服务器上进行发布,并且如果用我们的客户端(浏览器)去访问这样一个ASP.NET的网页应用程序。
我是在VMWARE 6.5.2的虚拟机里安装了一个Windows Server 2003 Enterprise R2版本。
如图,分了512M的内存,40G的硬盘(关于虚拟机的使用,Windows Server 2003如何进行安装,这里不讨论):
纯净的Windows Server 2003,无IIS,.NET Framework为1.1。
因此在发布ASP.NET程序前,首先要在Server端上安装IIS(并且要支持ASP.NET),IIS6.0由Windows Server 2003 系统盘自带。
开始->控制面板->添加或删除程序->添加/删除Windows组件
找到应用程序服务器
如图:
勾选后,点详细信息。再勾选ASP.NET。
进入Internet信息服务(IIS)的详细信息 -> 万维网服务的详细信息 -> 勾选Active Server Pages
最后点确定安装。需要插入Windows Server 2003的安装盘。
安装IIS过程中...
IIS安装完成。
此时,管理工具里多出一项Internet 信息服务(IIS)管理器
点击后可以看到Web 服务扩展里面只有ASP.NET v1.1.4322,说明系统里只安装了.NET Framework 1.1。
更改默认网站的主目录到d:/inetpub/wwwroot下。点开网站->找到默认网站->右键选择属性->找到主目录页,更改本地路径为d盘下的相应目录。
如图:
点击确定后,让我们用浏览器打开该服务器上的页面看一下。
如图:
OK。无权查看页面就是该IIS已经启动了。
现在就来发布我们的由前一章编写的ASP.NET的WEB应用程序看一下,会出现怎样的问题。前面的ASP.NET网页程序是用Framework 3.5编写的,而发布服务器上此时只有.NET Framework 1.1。
在Visual Studio中菜单里找到生成->发布网站
目标位置输入发布服务器的网络路径,点击确定进行发布。具体里面的选项意义,自行百度或Google下。
检视下Visual Studio底部的输出框里面的内容,看下是否成功发布。
好了。下面来看下我们开发的东东打开会是一个什么状况。
在发布服务器上打开网站,如图:
在其他客户端上用浏览器打开发布服务器上的网站,如图:(不会显示详尽的出错原因)
注意:在服务器上打开网站由于是本机地址因此会显示详细的出错原因,为了安全因素(无法识别的type属性,其实就是Framework的版本在发布服务端未安装)在客户端上提示你需要增加customErrors mode="off" 标签才能在客户端上显示具体的出错原因。
这时即使你在web.config配置文件中加入了此标签,仍然不会提示详细的出错原因在客户端。原因并不是像有的网上搜索的因为大小写的原因等等。而是因为.NET Framework 1.1根本不支持这个标记。无论你加了与否,都会这样提示。至少要在发布服务器上将.NET Framework升级到2.0及以上版本才支持此标签。
那好,接下来要做什么也很明确了。升级发布服务器端的.NET Framework版本到3.5SP1。
以上地址的程序是在线安装程序,页面下方可以下载到一个231M的完整离线安装包。
注意:其实那个所谓的完整安装包仍然不完整,下载后如果在没有网络的机器上安装仍然无法成功,里面缺少中文语言包,在英文的Server系统上安装是不会有问题,网上有合成中文包的版本,自己搜一下即可。
安装过程不详述了,很简单,一路NEXT即可。整个安装步骤中前慢后快,仔细研究下就会知道所谓的.NET Framework 3.5SP1,其实包括了.NET Framework 2.0SP2、3.0SP2、3.5SP1(可以在控制面板->添加或删除程序里面看到安装3.5SP1之后增加了哪些东西),3.5SP1并不是一个独立的框架可以兼容之前所有的.NET Framework,而是将之前每一个Framework版本(除1.1之外)的最后一版安装上。而3.0、3.5也只是对2.0进行了扩充,真正大量的内容都在2.0的框架里。
如图:
是不是安装完了.NET Framework 3.5SP1之后,我刚刚发布上去的页面就可以正常显示了呢?让我们再次打开页面看下。
是不是仍然是和刚刚一样的错误?
这是为什么呢?
打开IIS管理器看下,如图:
是不是多了ASP.NET v2.0.50727这个Web 服务扩展。
但在默认网站的属性里面虽然多了一页ASP.NET,不过版本仍然是1.1.4322
很奇怪是吧?明明安装的.NET Framework 3.5SP1为什么ASP.NET这里只有2.0的版本呢?这是由于.NET Framework 3.5SP1只是对2.0进行了扩展,虽然版本号增加了,但并不是全新的兼容上一个版本的框架,而只是一个扩展包的形式存在,所以在ASP.NET这一块,仍然显示的是2.0的版本。
此外,在安装了3.5SP1后,ASP.NET在IIS里面的的默认设置仍然是使用1.1来进行编译,我们需要将asp.net版本注册成2.0。
步骤如下:
1、进入目录:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/
2、执行:aspnet_regiis.exe -i
如图:
此时再打开网页,一切就OK了。
--------------------------------------我是分割线-----------------------------------------
汇总一下在一个纯净的Windows Server 2003上部署ASP.NET程序(.NET Framework 2.0及以上版本开发的)的基本步骤:
1、安装IIS
2、安装.NET Framework 3.5SP1
3、将asp.net 2.0 注册到IIS上(进入.NET Framework的安装目录,执行aspnet_regiis.exe -i命令)
4、发布网站
注:AJAX的应用还需要在发布服务器上另装一些程序,虽然.NET Framework 3.5SP1已经是支持AJAX了,但是对于网上某些现有原码,是用低版本的微软AJAX组件进行开发,高低版本之间相互独立不冲突,也不互相兼容,因此低版本的一些程序仍然需要安装。写到AJAX部分时再详述。