ASP.NET 2.0来了! 在我们为ASP.NET 2.0的新特性感到激动的同时,我想很多ASP.NET开发人员非常关心这样一个问题:ASP.NET 2.0的兼容性怎么样?ASP.NET 1.1开发的程序能直接运行在ASP.NET 2.0上吗?
在SDK文档中,对于.NET Framework 2.0的兼容性有这样描述的:“The .NET Framework provides a high degree of support for backward compatibility. For example, most applications created using version 1.0 will run on version 1.1 and applications using version 1.1 will run on version 2.0.”。
看了这样的描述,我想:如果ASP.NET 1.1开发的程序真能直接运行在ASP.NET 2.0上,那就太棒了,但ASP.NET 2.0相对于1.1的变化这么大,做到这样的兼容难度很大,微软一向对向后兼容很重视,我们应该有所期望。如果兼容性不理想,从ASP.NET 1.1 迁移到ASP.NET 2.0会带来很大的成本与风险。自己开发的程序可以在ASP.NET 2.0上重新编译,可程序中所用的第三方组件呢?
那我们拿博客园的程序做个试验吧。对程序不作任何修改,直接在IIS管理器中将ASP.NET切换至2.0, 并将*.*的映射改为ASP.NET 2.0。
程序安装在本机的blog虚拟目录中,首先我访问地址:http://localhost/blog(由于建立了通配符映射,IIS不会把地址改为http://localhost/blog/default.aspx), 出现第一个错误:
There is no build provider registered for the extension ''. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.
在ASP.NET 1.1中,这样访问是正常的,由于建立了通配符映射,请求由web.config中 <add verb="*" path="*" type="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common" />处理。而在ASP.NET 2.0 中,请求的资源需要有一个buildProvider来处理(在<buildProviders>中进行设置),而访问http://localhost/blog,并没有包含文件名,ASP.NET 2.0认为是一个扩展名为空的文件,找不到相应的buildProvider来处理(如果是aspx文件,默认的buildProvider是System.Web.Compilation.PageBuildProvider),所以会产生这样的错误。 我想应该可以通过在<buildProviders>中增加一个处理这类请求的buildProvider来解决这个问题,可是我在设置时遇到了一个问题:extension该如何设置?我尝试了以下几种设置都不行:
<add extension=".*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="*.*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="" type="System.Web.Compilation.PageBuildProvider" />(这个设置根本不允许)
不知是我没有找到设置的方法,还是extension本来就不支持通配符?如果是后者,这就是一个兼容性问题。但这种情况是比较特殊的,一般ASP.NET程序中不会遇到这样的情况。如果真的无法解决这个问题,那类似.Text这样使用通配符映射的方式将成为历史。如果谁知道解决方法,希望能得到您的指点。
那我们用正常的地址方式访问吧,输入http://localhost/blog/default.aspx ,OK!首页竟然显示出来了!当我正在赞叹ASP.NET 2.0的兼容性时,突然弹出了“Visual Studio Just-In-Time Debugger”窗口,窗口的错误信息为:
“An unhandled exception("System.Data.SqlClient.SqlException") occurred in aspnet_wp.exe”。出现这样的错误,真让人失望。难道ADO.NET也不兼容? 这时,我多次刷新页面进行测试,竟然出现了“Server Application Unavailable”错误。写到这,当我准备对ASP.NET 2.0的兼容性进行批评时。我突然想到是不是连接字符串设置的问题,ASP.NET 2.0的兼容性不应该这么差,我本来采用的是集成Windows验证(IntegratedSecurity=SSPI), 改成SQL Server验证试试。果然是Integrated Security=SSPI引起的,改过后,这两个错误就不出现了。Integrated Security=SSPI为什么会引起这个问题?是不是兼容性引起的?是不是通过更改设置可以解决?目前还不知道,以后再仔细分析吧。虽然存在上面所说的问题,但我觉得这样的兼容性还是可以接受的。
继续测试。网站首页、Blog首页可以访问,进入管理页面试试,又来一个错误:
The WebResource.axd handler must be registered in the configuration to process this request.
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<httpHandlers>
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
</httpHandlers>
</system.web>
</configuration>
一看就知道,这是与FreeTextBox相关的,明明web.config有这个设置,而且在ASP.NET 1.1中运行正常,看来是ASP.NET 2.0带来的问题。对于第三方控件的兼容问题,我们束手无策,只有两个选择:
1、等第三方控件升级后,再升级自己的程序;
2、放弃使用该控件。
继续往下测试,查看文章分类页面,出现错误:
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Ambiguous match found.
Source Error:
Line 1: <%@ Control Language="c#" Inherits="Dottext.Web.UI.Controls.EntryList" %>
Line 2: <%@ Import Namespace = "Dottext.Framework" %>
Line 3: <h2><asp:Literal ID = "EntryCollectionTitle" Runat = "server" /></h2>
对这样的错误我目前是束手无策,以后再分析。
今天就测试到这吧!
由于刚刚接触ASP.NET 2.0, 如果文章中有不妥之处,欢迎指正。
posted @ 2005-11-01 16:03
dudu 阅读(5282)
评论(14) 编辑 收藏
发表评论
我刚发了一帖,就看见你的
这里也有.text的2.0 兼容性的问题
http://weblogs.asp.net/pleloup/archive/2005/10/31/429030.aspx
如评论中说的,你的方法是自然升级,还有一种方法-Side by Side,你不一定要选择一定要运行VS2005/.NET2.0下,因为你没有使用任何2.0的API,2.0 新版本并不一定会给你带来好的益处,相对于重新修改这些代码的工作量来说,不修改也能运行,修改是为什么?难道就是为了在Visual Studio 2005 中编译通过吗?
这个选择权在于你, 对吧--haha
Ref:
http://bbs.dotnettools.org/activeubb/NewsDetail.asp?id=4891
自从dudu屏蔽掉搜索引擎的crawl,博客园真的速度快了好多呢,前段时间真是灾难,回想起来都惨不忍睹:^),但是,为什么以前一直没有那个问题呢?
呵呵,只感把几个小项目移植过去,编译通过,而且运行也算稳定
呵呵,刚刚下载,不知道怎么弄,我今天晚上就拿DNN来开刀。
@ccBoy
这样自然升级的确没有什么实际的好处, 对博客园来说唯一的好处是64位的支持。
你文章中所说的“.text的2.0 兼容性的问题”实际上是FreeTextBox与ASP.NET 2.0的兼容性问题,我觉得这些小小的兼容性问题会给ASP.NET 2.0的晋及带来很大的影响。
为什么这么说呢? 就拿博客园来说, 我现在觉得ASP.NET 2.0很好, 我想升级到ASP.NET 2.0, 即使基于ASP.NET 2.0重新开发都可以, 但仅仅因为这个FreeTextBox与ASP.NET 2.0的兼容性问题,我只能放弃升级,因为升级后将不能使用FreeTextBox, 也就是说只要博客园的程序中有任何一个第三方控件与ASP.NET 2.0存在兼容问题, 博客园只能暂时放弃升级。其他软件也面临同样的问题,只要一个软件它所用的一个控件与ASP.NET 2.0存在兼容问题, 它就暂时不能升级。
控件级的兼容性太重要了,我们在.NET中连非.NET控件都可以使用,在ASP.NET 2.0竟然不能使用ASP.NET 1.1的控件, 有点太说不去了。
微软应该不惜一切保持向后兼容性,就像他以前所做的,ASP.NET 2.0更应该这样。从目前的测试情况看, 微软似乎做得不够好。
所以, 博客园只能在确保程序中所用的所有第三方控件与ASP.NET 2.0不存在兼容问题, 才能考虑升级。
@Teddy's Knowledge Base
真正的原因只能crawl自己知道。
让我猜想一下:
前段时间某一天, 这两个crawl在网上寻找自己感兴趣的资料, 进入博客园进行例行爬网时, 突然发现这个不起眼的网站竟然藏着这么多好东西,“以前怎么没发现, 赶紧向总部汇报”,总部接到消息后, 先查了下竞争对手的网站(Google、BaiDu),大吃一惊, 竟争对手竟然收藏了博客园那很么多资料, 面对搜索市场激烈的竞争,他们立即下令“给我狠狠地爬,把以前遗漏的资料全部爬回来”,为此他们还成立了博客园爬网小组,专门处理博客园爬网事宜。于是, 他们就开始疯狂地爬博客园的数据, 而完全不顾博客园服务器的承受能力, 造成了博客园服务器运行不正常, 直到博客园发现他们, 采取反爬措施才解决问题。
@徐灿钊Asp.net专栏
希望能把开刀后的结果告诉一下大家。
ms作ASP。NET肯定没SUN作JSP作的好嘛,而MS作WINFORM比SUN作的好
博客园应该加一个意见/投诉区功能.大家对博客园哪里需要改进,哪里有BUG都可以提一下.
我的"何在CSS样式中利用expression实现JavaScript中的onmouseover/onmouseout事件 "发布到.NET新手区后文章下面的第一个连接就有问题了.但在我的博客里打开它下面的连接去没有问题.
请帮忙看看.
Dotnetnuke她的ASP.NET 2.0的兼容性有人试过吗
dudu你好,刚才我也升级了.也出现了你面提到的使用通配符映射的方式出现的问题,
我看现,博客园已升级为asp.net 2.0了,那这个问题是怎么处理的呢?
先谢谢,dudu.