最近正在对公司的网站进行模式转换,主要原因是2.0的WebSite模式经常造成难以理解的编译错误和系统崩溃;据同事讲他们正在开发的一个基于DotNetNuke的项目也面临同样的问题,而且总是随机出现,找不到原因。主要的一个问题是这样的:
(Exception from HRESULT: 0x80131401)
Description: An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in the code.
大家也许见过这个错误,问题在于当这个问题发生的时候,你不知道到底是那个文件的拿行代码造成了错误,特别是在一个>10G的网站上。所以我们只能iisreset,并删除asp.net的临时文件。这样的情况持续了大概2个月的时间,后来我们发现只要没有人更新网站上的文件,这个错误是不会出现的。一般它的出现都是在某个文件被更新以后,网站正在自己编译的过程当中。
当vs2005发布的时候,website的开发模式曾经是其中非常重要的一个亮点;但是在实际使用中我们发现,website的模式的确给开发提供了很多方便,比如可以直接修改任何的code-behind和app_code代码,而不需要从新编译。但是如果在一个已经是运行在production server上的应用还采取这样的方式,就有点不妥了。主要问题是,当程序员修改了代码上传以后,网站自身要从新编译,而同时还会有多个外部访问;这非常容易造成整个编译过程的混乱。另外的问题是,程序员只有等到网站自我编译完成以后才能知道自己所修改的代码是否是正确的,这将非常的危险。
基于这些问题,我们决定将网站按照web application的模式从新部署。webApp是asp.net 1.1中的默认开发模式,但是在vs2005的最初版本中是找不到的,你需要安装一下hotfix和plug-in才能使用这个功能。
Install “MS Visual Studio 2005 Hotfixes”
Install “VS2005 Web Application Projects”
Install “VS2005 Web Deployment Projects”
http://msdn.microsoft.com/asp.net/reference/infrastructure/wdp/
Figure: 安装完成以后你会发现久违了的web application项目类型
但是对于已有的基于website模式的项目,你可以使用快捷菜单将其转换为webApp,从新编译以后,你会发现bin文件夹也回来了。
我个人认为,使用vs2005的website模式进行开发是一个很好的选择,但是如果想要进行部署,特别是在网站项目非常庞大的情况下,还是要使用web application的模式;起码的一点,这样你自己很清楚网站是否编译通过,很清楚所有需要的文件在哪里;并且也省去了网站动态编译的延迟,性能上也会有一定的优势。