独上高楼网站
  •    你所在位置:首页 VS.netASP.net基础知识〉ASP.NET专家访谈:需要马上升级到VS2008吗?
  • ASP.NET专家访谈:需要马上升级到VS2008吗?
  • 作者:莺锦  文章来源:51CTO.com  发布日期:2008-07-31  浏览次数:788
  • 打印这篇文章
  • ASP.NET专家访谈:需要马上升级到VS2008吗?

    【51CTO.com独家特稿】随着网络技术的不断成熟,越来越多的人开始认识和了解ASP.NET技术,但熟悉并不等同于掌握,对于怎样去驾驭它很大一部分人还存在一定的疑问和行动的误区。为了帮助大家深入了解ASP.NET技术、提高ASP.NET的使用水平,2008年5月20日,51CTO.com特别邀请了两位专家方兵老师和荣耀老师作客51CTO专家访谈室,直接和读者进行交流,并回答网友的问题。

    方兵老师毕业于北京邮电大学,长期从事ASP.NET软件的开发及研究工作,曾在上海及北京的软件公司历任软件架构师、技术总监等职位,参与过物流、电信、银行及印刷等行业的B/S应用程序的设计与开发。对于实际问题有着很强的实战经验。

    荣耀老师是南京师范大学教师,南京航空航天大学计算机应用技术博士(在读),C++模板技术和微软.NET技术研究者和教育者,他的著译作品包括《ASP.NET 2.0实战起步》、《.NET大局观(第2版)》、《C++ Templates全览》、《Imperfect C++中文版》、《C++必知必会》、《C/C++安全编程》、《C++模板元编程》以及《Windows Forms 程序设计》等。

    以下是聊天实录的第二部分,51CTO.com略有整理。

    其他部分请参见 ASP.NET专家访谈之一:.NET仅仅是一门新兴语言吗?以及ASP.NET专家访谈之三:学习ASP.NET的捷径

    ◆ASP.NET和ASP语言的关系

    51CTO.com记者:解决了以上的问题我们脑中应该会有一个清晰的思路了,作为.NET框架中很重要的组成部分ASP.NET究竟会给我们带来什么新的内容?它与ASP语言仅仅是继承和发展的关系么?他们的最大区别是什么呢?

    方兵老师:ASP现在被从头到脚地重建了,结果就是ASP.NET。它并不只是ASP 4.0,它是一个用于 Web开发的全新框架,其中包含了许多新的特性。ASP.NET提供了更易于编写、结构更清晰的代码,这些代码很容易进行再利用和共享;ASP.NET使用编译后的语言,从而提升性能和伸缩性;ASP.NET使用Web表单使开发更直观,利用面向对象技术促进组件的再利用。另外,ASP.NET中还包括有页面事件、Web控件、缓冲技术以及服务器控件和对数据捆绑的改进。供 ASP.NET使用的库以及在Microsoft.NET框架中允许通过Web 使用客户商用函数,为程序员提供了更多新的开发机会。

    ASP.NET使代码更加干净。现有的ASP 应用程序中,不管你将它们写得怎么样,结构总是充满了长长短短的代码。而ASP.NET的代码不仅更容易编写,而且更加干净整洁,比ASP代码更易于阅读。同时,ASP.NET代码的结构方式提高了其再利用性和共享性。

    ASP.NET 改进了配置、伸缩性、安全性和可靠性。对于简单的ASP应用程序,配置其实并不算什么问题,但是当你移植到一个利用组件的N层结构中时就会遇到问题。当你对这些应用程序进行配置和维护时,DLL 陷阱问题(组件注册、版本、锁定的DLL等等)就会出现。ASP.NET中则取消了组件注册以及DLL锁定,全面使用了XML配置文件,从而解决了这个问题。这样你只需要执行复制文件的工作就能配置一个Web应用程序。
    ASP.NET对各种不同的浏览器提供了更好的支持。对于ASP开发人员来说,浏览器兼容问题好像是一个永恒的问题。你或者为低一级的浏览器编写代码,例如用HTML 3.2,或者限制页面的浏览范围。无线应用程序协议WAP设备的引入还会深化这个问题。

    ASP.NET 造就了一类新的Web应用程序。目前的Web应用程序通常都是同一种模式:一套线性应用程序,然后将逻辑植入其中之一。ASP.NET允许开发人员打破这种单一模式,创造出更加动态而且伸缩性更强的应用程序,这种应用程序能够更好地满足公司的商业需求,并提供一个更加丰富的开发环境。

    51CTO.com记者:那么是否可以这样说,ASP.NET是.NET平台的一个不可或缺的部分?

    方兵老师:是的,在目前看来,你甚至可以看作它是.NET的主要部分,因为除了ASP.NET之外的其他部分目前应用还不是很广泛。

    荣耀老师:是的,可能是.NET平台应用最广泛的一部分。

    51CTO.com记者:名叫探索步行者的网友想知道.net和asp哪个更容易让新手上手学,.net学习中该注意哪些方面呢?

    方兵老师:我想.net应该会更容易上手一些吧,因为它的代码可读性更强。学习中要注意积累、多思考、主动探索、带着问题去查找资料。

    荣耀老师:客观地说,从技术难度上讲,ASP.NET比ASP要难一些。新手要想较快地上手编程,方法之一是阅读《ASP.NET 2.0实战起步》并动手实验。这本书虽然有一些写作和制作上的瑕疵,但对于希望较快掌握ASP.NET动手编程能力的初学者来说,还是非常有帮助的。

    51CTO.com记者:名字叫做snakeguang的网友问:面对PHP等开源框架的竞争,ASP.NET的制胜法宝是什么?

    方兵老师:这是一个见仁见智的问题,PHP等开源框架和ASP.NET不是你死我活的关系,更多的是在竞争中互相借鉴的一个过程,我想ASP.NET的优势主要是它不是一个孤立的技术,而是一种和ADO.NET、Windows Client甚至包括WCF、WWF、WPF等等技术深度整合深度协同的技术吧。

    51CTO.com记者:那么ASP.NET与其他开发工具比有什么独有的特色?在开发应用软件方面有什么优势?

    方兵老师:ASP.NET提供了更易于编写、结构更清晰的代码,这些代码很容易进行再利用和共享;ASP.NET使用编译后的语言,从而提升性能和伸缩性;ASP.NET使用Web表单使开发更直观,利用面向对象技术促进组件的再利用。另外,ASP.NET中还包括有页面事件、Web控件、缓冲技术以及服务器控件和对数据捆绑的改进。供 ASP.NET使用的库以及在Microsoft.NET框架中允许通过Web 使用客户商用函数,为程序员提供了更多新的开发机会。

    ASP.NET使代码更加干净。现有的ASP 应用程序中,不管你将它们写得怎么样,结构总是充满了长长短短的代码。而ASP.NET的代码不仅更容易编写,而且更加干净整洁,比ASP代码更易于阅读。同时,ASP.NET代码的结构方式提高了其再利用性和共享性。

    ASP.NET 改进了配置、伸缩性、安全性和可靠性。对于简单的ASP应用程序,配置其实并不算什么问题,但是当你移植到一个利用组件的N层结构中时就会遇到问题。当你对这些应用程序进行配置和维护时,DLL 陷阱问题(组件注册、版本、锁定的DLL等等)就会出现。ASP.NET中则取消了组件注册以及DLL锁定,全面使用了XML配置文件,从而解决了这个问题。这样你只需要执行复制文件的工作就能配置一个Web应用程序。

    ASP.NET对各种不同的浏览器提供了更好的支持。对于ASP开发人员来说,浏览器兼容问题好象是一个永恒的问题。你或者为低一级的浏览器编写代码,例如用HTML 3.2,或者限制页面的浏览范围。无线应用程序协议WAP设备的引入还会深化这个问题。本文中Web表单这部分描述了ASP.NET是如何解决浏览器兼容性问题的。

    ASP.NET 造就了一类新的Web应用程序。目前的Web应用程序通常都是同一种模式:一套线性应用程序,然后将逻辑植入其中之一。ASP.NET允许开发人员打破这种单一模式,创造出更加动态而且伸缩性更强的应用程序,这种应用程序能够更好地满足公司的商业需求,并提供一个更加丰富的开发环境。

    荣耀老师:对于这两个问题我想结合起来说一下。一个集成的开发环境Visual Studio(以及庞大的.NET框架类库)提供了ASP.NET开发人员需要的一切;容易上手;与Windows系统及相关服务有着最佳集成,这些都是ASP.NET的优势。

    初学者学习其他技术的时候面对繁多的可选工具感到无从下手,学习ASP.NET,你的选择很简单:使用Visual Studio + C#语言。虽然.NET支持多语言并且也有微软之外的其他.NET开发工具,但这两者无疑是进行.NET应用开发的主流之选。

    是否需要马上升级到VS 2008?

    51CTO.com记者:好的。提到ASP.NET的学习,我们就不得不提到微软提供的开发工具VS 2005或者VS 2008,已经有网友对这方面提出了很多的问题。

    荣耀老师:我所了解到的国内许多公司仍然使用VS2005+ASP.NET 2.0进行企业应用开发,毕竟VS2008的中文版和ASP.NET 3.5发布的时间并不长。

    方兵老师:我目前在中石油的一个软件项目中担任项目经理,我们已经开始使用VS2008进行大规模的开发。

    实际上目前我们已经开始在使用SilverLight 2.0进行小范围的尝试,今年年中.net 3.5 SP1发布后,我们就将采用动态数据技术来构建ASP.NET应用程序。

    荣耀老师:一些业界的公司给我的反馈是不会在短时间内过渡到.NET 3.5,毕竟公司项目开发不是赶时髦。但是,作为技术作者和学习者来说,最新的东西总是令人兴奋的。

    51CTO.com记者:那在大规模开发中,用VS2008是不是对开发平台与应用平台的硬件要求都比较高呢?在很多项目中成本的考虑也还是很重要的。

    方兵老师:开发平台的硬件要求比较高一些,应用平台倒未必,但是如果你考虑到人月成本的话,我想使用VS2008的总成本应该会降低,当然前提是善用它,如果你没能使用到VS2008的任何新特性的话,那就无法有效地降低人月成本了。

    51CTO.com记者:刚才方老师所提到的SilverLight 2.0,这又是怎样一个概念呢?

    方兵老师:SilverLight是基于.NET中的WPF技术的一项界面呈现技术,你可以认为是微软用来和Adobe的Flash竞争的东西。

    51CTO.com记者:那SilverLight 2.0是否只能做界面?能不能像Flash一样做动画,做各种东西呢?他里面的东西是不是类似于.ocx呢?

    方兵老师:它可以做各种东西,但是很显然是需要期待版本的进化,毕竟Flash都已经快要到第十个版本了。它和ocx是类似的,但是还是有很多的不同,具体你可以去查资料。

    51CTO.com记者:使用SilverLight开发的时候.需要注意什么?

    方兵老师:团队开发环境中,尤其需要注意的是模块的选择。一般来讲,对于模块的选择要考虑的内容有这么几个方面:系统的可伸缩性,开发的难度,模块间的耦合度,项目交付周期,还有就是团队成员的开发能力和执行力。从以上几个方面综合考虑来选择模块,例如对于数据访问层的开发,有针对各个数据库表单独编写访问代码和统一写一个通用的数据库访问模块两种方案,那么使用通用的数据库访问模块相比为每个数据库表单独编写访问模块的运行效率会有稍许降低,但是却可以消除团队中因个体差异带来的不确定风险并且缩短开发周期,所以在作出选择的时候就要考虑是程序效率优先还是消除团队个体差异带来的风险或缩短开发周期优先。

    51CTO.com记者:网友hnxdd想知道,在开发用户界面时是否用VS就可以完成任务呢?还需要Dreamweaver等的帮助么?

    荣耀老师:Visual Studio提供了丰富的界面元素,还可以将第三方提供的控件和组件集成进来使用,完全可以满足企业应用对用户界面的要求。

    方兵老师:基本上,我开发用户界面的时候是只用VS的,我的团队里的美工虽然不懂C#之类的编程语言,她做界面也是只用VS的。但是也曾经和连动态界面整合都不懂的美工,他们只会做一些静态的HTML页面,这时动态界面的整合就得我们的程序员亲自动手做,这种情况下他们用什么工具就是他们自己的事了,通常他们会用Dreamweaver。如果对HTML非常了解了,用什么工具都是无所谓的,即便只用记事本一样能够写出很好的网页来。

    51CTO.com记者:还有一位网友问,现在开发管理信息系统或OA方面的项目是用VS2003还是2005好呢?后台是用SQL Server2000/2005/2008。

    方兵老师:我觉得用VS2005比较好,因为如果能够灵活熟练的使用VS2005的新特性,能够让你的代码减少70%以上。当然了,如果是用VS2008就更好了。

    荣耀老师:Visual Studio 2005比Visual Studio 2003提供了更丰富的功能,因为无论是.NET框架类库还是C#语言都比之前的版本都得到了增强。

    事实上,我目前使用的是Visual Studio 2008(微软的站点上可以下载到90天试用版),操作系统则是Vista,使用Visual Studio 2008可以开发针对.NET Framework 2.0/3.0/3.5的应用。

    主、客观条件允许的话,比如说你是自己学习,不受团队制约,选择最新版本的开发工具总是没错的。

    VS2003的自动调试功能如何关闭

    51CTO.com记者:有位网友可能是在实际中遇到了问题。他说:vs2003的自动调试功能如何有什么方法可以彻底关闭掉,我在电脑的"服务"里面已经关闭掉了.但是我一浏览有些访问速度慢的网站,vs2003的自动调试就"蹦出来"根本不要我通过.所以很多网站看不了.不知道我说的是否清楚。能否帮助解决下?

    方兵老师:这个你可以在Internet选项中将“调试”选项关闭,它以后就不会再来烦你了。

    51CTO.com记者:看来行家一伸手,问题就轻松解决了。

    51CTO.com记者:但是他又提出来了新的问题:vs2003的自动调试功能如何有什么方法可以彻底关闭掉,我在电脑的“服务”里面已经关闭掉了。但是我一浏览有些访问速度慢的网站,vs2003的自动调试就“蹦出来”根本不要我通过。所以很多网站看不了。不知道我说的是否清楚。能否帮助解决下?我实验过了,包括系统服务我都关闭了,还是有错误。不知道是不是跟我的操作系统winxp有关系?看看专家是否能给他继续解答一下。

    方兵老师:看你的调试器要调试的是什么了,如果是网页上的脚本例如Javascript的错误引起的自动调试对话框跳出,那么在Internet选项中将“禁用脚本”选中即可。如果是Windows应用程序的错误引起的,则可以修改注册表禁止VS发现异常自动弹出调试窗口。

    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\
    Auto的值由1改为0

    51CTO.com记者:网友cool提问,他说ASP.NET调用窗体应用程序或者控制台应用程序的时候,调式环境下可以运行EXE,而编译环境下不可以正常运行(虽然任务管理器有这个EXE进程,但实际上它没有执行)。 如何解决?

    方兵老师:这是因为运行环境的不同,调试环境下是在用户帐户下运行,用户帐户拥有用户界面,因此它可以显示IDE,而在编译环境下是使用的服务帐户,服务帐户并不拥有用户界面,因此无法显示IDE,所以很多EXE程序都无法运行,其实如果你写过Windows服务应用程序的话,你也会发现这个问题,尤其这个问题会导致你调试Windows服务会很困难。

    51CTO.com记者:有网友在开发短信平台的时候,联通的短信客户总是收不到,或者收到的是半条,他觉得应该是编码问题,那么他应该用哪个编码格式呢?百度了很多方法.觉得是vs2003本身的错误。

    方兵老师:一般来讲,短信发送使用的是utf-8格式,当然,客户收不到短信或者只能收到半条更多的是与你的服务提供商有关。

    关于反射技术

    51CTO.com记者:在实战中,还真是问题多多,各个方面的都有。对于网友提到的反射技术我好像也还是第一次听说,能不能详细的给我们描述一下?

    方兵老师:反射这种东西比较复杂,简单来说,是通过该技术让.net对象自己告诉我们它是什么,有些什么,如何使用等等信息。

    方兵老师:例如ASP.NET中的GridView绑定数据的数据绑定列就是反射技术的一种典型应用。

    51CTO.com记者:听起来这倒是对大家很有帮助的东西。

    荣耀老师:反射的细节问题最好找一些资料看一看,然后写一些小程序,可以加深了解。

    方兵老师:还有我们将在ASP.NET 3.5 SP1中将看到动态数据这种奇妙的应用,它也是通过大量使用反射来实现的。

    关于委托技术

    51CTO.com记者:那什么又是委托技术与设计模式实现呢?看来大家对ASP.NET中的概念有很多还不太清楚。

    方兵老师:委托就是让程序根据参数调用某个在设计时未知的方法。

    荣耀老师:委托和设计模式可能用一两句话说不清楚。委托可以认为是类型安全的函数指针,是事件处理机制的实现基础。

    方兵老师:设计模式这种东西,我的理解是,一些经过经验证明有效的解决问题的方法而已,并不是必须要严格遵循的条条框框。正如有一句话说,“世上是本没有路的,走的人多了,也就成了路”,设计模式是人们已经踩出来的那几十条路。

    51CTO.com记者:委托对象定义了一个回调函数的形式,而事件又是依据一个委托创建的,那么\"事件\"存在的意义是什么?一种委托对象只能对应一种形式的函数,一种事件对象只能对应一种形式的委托,那么直接把事件与函数关联起来不好么?为什么需要在中间加上一层?

    方兵老师:因为通常你在设计一个类的时候,你并不知道你这个类会被什么对象调用,因此需要在中间加上委托,委托就是一种函数的规范,只要调用方的函数符合这个规范,便可以被调用。使用委托的目的便是为了“解耦”,就和你在类的这一级别上使用接口是为了解耦一样。

    51CTO.com记者:以Windows应用程序为例,众所周知,Windows底层是基于消息驱动的,当处理消息时,省去事件一层,直接调用委托中的函数列表不是更直接?省去委托一层也是一样.那么,是不是事件还有些别的什么我目前还不知道的特性?

    方兵老师:前面已经说过,委托是函数的规范,引入委托其目的就在于定义一个被调用方函数的“规矩”,俗话说,无规矩不成方圆,在没有委托之前,函数列表或者函数指针都不知道将要被调用的函数是否符合规范,只有在运行时抛出异常之后才能够知道。这是委托和函数指针最大的不同。

    荣耀老师:对于上面这两个问题我想做一下补充说明。委托常用的功能之一是用来处理事件,但不限于此。

    如果将事件当成是一种客观存在,以这个思路来思考问题就好办了。

    消息触发事件,事件的发生导致事件处理程序被调用。消息的发送方只需发消息,至于事件如何处理,它不关心。

    51CTO.com记者:网友浪子情风还想知道asp.net中事务一般用在哪一层比较好?他觉得放在数据访问层比较好,是这样吗?

    方兵老师:一般来讲,是放在数据访问层,我们也提倡尽量放在数据访问层,但这是针对比较简单的事务而言的,如果是针对比较复杂的事务,可能需要提升到业务逻辑层,但是不推荐在界面层中直接使用事务。

    关于安全问题

    51CTO.com记者:sam网友想向专家请教一个有关安全的问题:对于一些机密文件和图片,我希望能做到未经授权的客户不能下载和打印,但可以通过浏览器浏览,即只能在线看。但在实践中我发现其中的图片只要客户打开过以后就会自动被保存在客户的机器上(缓存文件夹),这样可能会造成一些机密图纸的流失,因为客户关闭窗口后可以从缓存中找回刚才的图片。请问专家有什么好的办法解决这个问题。忘了说,用的是ASP.NET+C#+SQL开发用户系统的。

    方兵老师:你可以将图片保存在数据库中,然后Response.Write方法直接将图片的字节流写到输出中,这样在客户端的缓存中就没有传统意义上的图片文件了。当然如果客户真的要盗你的图片的话,你是用什么方法都防不住的,例如客户使用截屏的方式你就什么技术手段都不起作用了。

    荣耀老师:我认为这是个伪问题。因为,即使解决了客户端缓存问题,授权客户也可以通过截屏的方式获得机密图片的拷贝。

    对于禁止图片缓存的技术细节问题本身,可到google中搜索,我刚刚在网上搜索到了两三种我没有尝试过的做法。类似的问题还有防止图片被另存、图片防盗链等。

     

  • 打印这篇文章
  • 与本文主题相关的文章
  • 返回首页