[教程]C#的反射机制

mikel阅读(972)

何为反射?
    反射指的是一个编程技巧,在当前应用领域的运行时间内,开发者可以利用它授权一个程序集检查并修改自身或其他程序集。那些检查能够让开发者执行比用其他方 法实现的更为强大的后期捆绑功能。反射是一个较新的微软开发方法;但是,Java和其他现代语言包含了与之十分相似的功能。作为.NET Framework的一项特色,反射能够被任何与.NET兼容的语言应用,如C#、VB.NET或J#。与本文的可下载版本一同的C#样本项目说明了本文 介绍的一些技巧。
    反射的运作模式?
    .NET Framework中生成的每个程序集都包含了描述程序集以及程序集中的类或结构的元数据。应用这个元数据,反射能够列举一个程序集所包含的一切类、结构和数据。一旦我们了解某一程序集的功能,就可能修改并利用这些功能。
    为说明反射如何应用元数据,仔细研究下面从样本C#项目中摘录的代码。

private string ListProperties(object objectToInspect) { string returnString = ""; //To use reflection on an object, you // first need to get an instance // of that object's type. Type objectType = objectToInspect.GetType(); //After you have the object's type, you can get // information on that type. In this case, we're // asking the type to tell us all the // properties that it contains. PropertyInfo[] properties = objectType.GetProperties(); //You can then use the PropertyInfo array // to loop through each property of the type. foreach(PropertyInfo property in properties) { //The interest part of this code // is the GetValue method. This method // returns the value of the property. returnString += property.Name + ": " + property.GetValue(objectToInspect, null) + "\r\n"; } return returnString; }

    在这段代码中,我们列举了一个类包含的属性。为完成这一点,反射应用程序集中的元数据返回一个包含类中的属性的PropertyInfo数组。然后我们循环遍历PropertyInfo数组,并单独访问每个属性。
    在应用反射时,阅读元数据的过程对开发者是开放的。但是,反射应用元数据这一事实是重点。
    应用反射

    反射可用来执行一系列的功能。大多数的序列化引擎应用反射从需要序列化的对象中提取数据。反射还可以用内置模块来建立可自定义的应用结构。许多对象关系建模(ORM)还利用反射来执行动态映射功能。
    虽然没有进行广泛宣传,反射的最有趣应用之一在于它能大大减少完成单调开发任务所需的时间。由于反射是完全动态的,它允许你在不必重新生成代码的情况下改变基本的结构,因而反射是一个非常优秀的代码生成替代工具。
    例如,许多代码生成工具允许你根据基本的数据库建立数据对象。反射可用来从DataTables——它由数据库中返回——这样的数据结构中动态提取商业对 象(类)。应用这种方法,就不必应用代码生成器来生成代码。你只要简单地循环遍历DataTables中的竖栏,并将栏名称与商业对象中的属性名称动态匹 配。
    还可用反射将一个对象的属性与一个存储程序参数动态捆绑起来。这个捆绑过程允许你建立普通的数据访问方法,提供代码生成工具为你带来的许多完全动态的优势。因此,反射能够显著减少代码长度,并缓解应用维护压力。
    简单介绍
    在本文中,我们只是触及问题的表层,说明反射能够帮助开发者编写更好的代码。在以后的文章中,我将以这篇介绍性的文章为基础,更加详细的说明反射的其他应 用与功能。我要讨论的主题包括访问方法和在运行时的类属性、从数据结构中提取商业对象、以及建立一个可由多个项目应用的普通数据访问层。

[原创]面向生命(Life oriented 简称 LO)编程

mikel阅读(697)

序言:
软件是个生命体!
万事万物皆变化!
为什么我会提出”面向生命(Life oriented)”编程的思想,因为我们一直以来以建筑学的角度来审视软件工程,将软件定义为一种无生命的产品,而事实是外界的需求的无时无刻都在变化要求我们做出来的软件也随之变化,你难道想让一所盖好的房子会每时每刻根据外界的环境变化吗?而有生命的植物和动物则可以,会依据环境的变化而变化,一株草会根据压在上方的石头而改变自身的生长形态而曲折生长,软件应该也会为适应变化而调整自身的结构和功能来避免被变化的环境所淘汰!没错这是个适者生存的世界,软件也一样。
还有一个原因就是软件和人一样是有生、老、病、死的,诞生的时候具有面向对象思想中人类的基本属性和行为,但是还很弱,就像婴儿一样,但是面向对象的思想将世界万物都抽象成类,类的实例创建了对象,但是根本没有发现一类的对象之间是存在差异的,难道你看到过世界上长的完全一模一样的人吗?没有,因为每个人都是鲜活的生命体,尽管具有人类的共同属性和行为,但是每个人都有自己的性格、学习能力、、、、、、、,同时每个人的成长历程是根据环境的不同而不同,也就是适应变化,刚生下来的婴儿是最原始的对象,然后通过人类具有的基本行为嗅觉、听觉、视觉、味觉、触觉、学习能力来获得信息不断完善对世界的认识,从而形成不同的性格,也逐渐成长起来从需要外界服务,到能够对外界提供服务,而每个人接受的知识和自己的能力决定了最终他能够为外界提供哪种服务,随着时间周期和自身的消耗慢慢老化,直至死亡,软件也是如此,开始我们只是依据目前的静止的需求将其创建出来,可我们错就错在用一种静止的眼光去看待软件,其实它是在我们的不断提供信息的过程中,不断成长,同时从我们提供的信息中它在学习强化了自身的功能,并能够提供给我们更多功能,也就是目前各大网站提供的对外接口服务,其实yahoo或google开始这些网站系统是没有能力提供这些服务的,为什么是因为它们没有足够支持这些服务的信息,就好比它们开始只是婴儿还需要我们提供信息给它,让它成长一样,当它在我们不断的信息营养下成长成为一个巨人的时候,它们反过来能够为我们做更多以往我们都没有想过能做的事,这就是一个软件生命体,而不是我们传统意义上的建筑,建筑的功能是有限的而生命体的功能是无限的,因此你硬要将一个不变的软件去适应不断变化的环境那是种错误!因此,我们需要一种全新的思想去指导我们去设计软件那就是“面向生命”!
第一章:什么是面向生命编程
面向生命编程是以面向对象为基础,将对象赋予生命特质的一种编程思想。
面向生命编程将世界中具有相同属性和行为的事物化为为”类“,”类“的具体实例称为”对象“,每个对象都具有“繁殖”能力,繁殖的定义是同类的一个或多个对象通过“结合”产生”亲子对象“,”亲子对象“具有父类的”遗传“属性和行为,同时具有特有的”个性“的属性和行为,“生命体”是独立的个体,它具有“学习”、“分析”、“判断”、“成长”、“创造”能力,它通过对外界提供给它的信息内容利用“判断”和“分析”后,经过“学习”然后“创造”出”自制“的功能,以”服务“的方式提供给外界进行使用。”生命体”具有“模仿”能力,它通过外界提供的对某种功能的“描述”然后对描述进行“分析”、“判断”然后结合自身的“信息”资源进行“创造”出具有同等功能的能力从而达到“模仿”。
生命与应用系统的对应关系图:

生命体:就是最终的应用软件系统
骨骼:等同于应用系统的目录结构,用于支撑整个系统运行的整体的存储结构。
神经系统:就是大脑,是整个软件系统的核心,用于支配和调度各个”服务单元“运行实现”能力“的中枢,本身具有”记忆“、”学习“、”分析“的能力。
器官:对应软件系统中的服务单元,只具有某种能力的独立单元,通过对外界提供服务来实现某种能力,同时也具有自己的学习、分析、能力,对采集到的外界信息进行汇总分析并进行学习,来完成新能力的实现过程。
血液:对应软件系统中流淌的信息元,也就是独立的信息实体对象,每个信息对象也是独立的生命体,就像社会中的人一样,它具有独立的能力,承载独立的个性,穿行与整个系统中,并在神经系统的控制下在各个器官间穿行,为器官提供信息,同时获得器官处理后的信息。是整个系统的动力源泉,没有血液的系统是个死生命体,有了血液才能让生命体不断的成长。
皮肤:对外的表现形势,可以是页面、xml、、、等等用户易于操作的形势,甚至是视频或是图片、声音、信号等媒体

[教程]说说大型高并发高负载网站的系统架构

mikel阅读(735)

http://blog.csdn.net/starxu85/archive/2008/02/24/2116593.aspx

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站 对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用 的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站 所能比拟的。
大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。
上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。
1、HTML静态化
其 实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有 效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新 闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管 理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。
同 时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论 坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分 内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。
2、图片服务器分离
大家知道,对于Web服务器来说,不管 是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片 服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务 器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消 耗和执行效率。
3、数据库集群和库表散列
大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。
上 面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最 有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能 进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架 构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统 随时增加一台低成本的数据库进来补充系统性能。
4、缓存
缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
网 站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大 型社区使用了这样的架构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多 了,.net不是很熟悉,相信也肯定有。
5、镜像
镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网 络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实 时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等 工具。
6、负载均衡
负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个人接触过一些解决方法,其中有两个架构可以给大家做参考。
硬件四层交换
第 四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。 第四层交换功能就象是虚 IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的 载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决 定。
在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。
软件四层交换
大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置的熟悉能力。
软 件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满 足多种应用需求,这对于分布式的系统来说必不可少。
一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。
对于大型网站来说,前面提到的每个方法可能都会被同时使用到,我这里介绍得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会,有时一个很小的squid参数或者apache参数设置,对于系统性能的影响就会很大,希望大家一起讨论,达到抛砖引玉之效。

[教程]什么是CMS(内容管理系统)

mikel阅读(781)

CMS是Content Management System的缩写,意为”内容管理系统”。
CMS具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。
CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。
CMS还分各个平台脚本种类的。
内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场,对于内容管理,业界还没有一个统一的定义,不同的机构有不同的理解:
Gartner Group 认为内容管理从内涵上应该包括企业内部内容管理、Web内容管理、电子商务交易内容管理和企业外部网(Extranet)信息共享内容管理(如CRM和 SCM等),Web内容管理是当前的重点,e-business和XML是推动内容管理发展的源动力。
Merrill Lynch的分析师认为内容管理侧重于企业员工、企业用户、合作伙伴和供应商方便获得非结构化信息的处理过程。内容管理的目的是把非结构化信息出版到 intranets, extranets和ITE(Internet Trading Exchanges), 从而使用户可以检索、使用、分析和共享。商业智能系统 (BI)侧重于结构化数据的价值提取,而内容管理则侧重于企业内部和外部非结构化资源的战略价值提取。
Giga Group 认为作为电子商务引擎,内容管理解决方案必须和电子商务服务器紧密集成,从而形成内容生产(Production)、传递(Delivery)以及电子商务端到端系统。
我们认为内容管理系统是一种位于WEB前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容管理解决方案重点解决各种非结构化或半结构化的数字资源的采集、管理、利用、传递和增值,并能有机集成到结构化数据的商业智能环境中,如OA,CRM等。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的”内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到 Internet、Intranet以及Extranet网站的信息。
CMS是如何应运而生的?
随着网络应用的丰富和发展,很多网站往往不能迅速跟进大量信息衍生及业务模式变革的脚步,常常需要花费许多时间、人力和物力来处理信息更新和维护工作;遇到网站扩充的时候,整合内外网及分支网站的工作就变得更加复杂,甚至还需重新建设网站;如此下去,用户始终在一个高成本、低效率的循环中升级、整合……
于是,我们听到许多用户这样的反馈:
页面制作无序,网站风格不统一,大量信息堆积,发布显得异常沉重;
内容繁杂,手工管理效率低下,手工链接视音频信息经常无法实现;
应用难度较高,许多工作需要技术人员配合才能完成,角色分工不明确;
改版工作量大,系统扩展能力差,集成其它应用时更是降低了灵活性;
对于网站建设和信息发布人员来说,他们最关注的系统的易用性和的功能的完善性,因此,这对网站建设和信息发布工具提出了一个很高的要求。
首先,角色定位明确,以充分保证工作人员的工作效率;其次,功能完整,满足各门道”把关人”应用所需,使信息发布准确无误。比如,为编辑、美工、主编及运维人员设置权限和实时管理功能。
此外,保障网站架构的安全性也是用户关注的焦点。能有效管理网站访问者的登陆权限,使内网数据库不受攻击,从而时刻保证网站的安全稳定,免于用户的后顾之忧。
根据以上需求,一套专业的内容管理系统CMS应运而生,来有效解决用户网站建设与信息发布中常见的问题和需求。对网站内容管理是该软件的最大优势,它流程完善、功能丰富,可把稿件分门别类并授权给合法用户编辑管理,而不需要用户去理会那些难懂的SQL语法。
CMS是如何发展的?
内容管理从2000年开始成为一个重要的应用领域,这时.COM和B2B, B2C等经历了资本和市场的考验及洗礼,人们重新回到信息技术应用的基本面-如何提高竞争能力,而内容管理恰恰能够通过对企业各种类型的数字资产的产生、管理、增值和再利用,改善组织的运行效率和企业的竞争能力,企事业单位也开始认识到内容管理的重要性。
从企事业单位信息化的观点来看,以下因素导致对内容管理软件的巨大需求:
(1) 知识是企业的财富。在Internet交互过程中,只有十分之一涉及销售,其他十分之九都和信息交互有关,员工的知识获取越来越依赖于互联网,特别是在电子商务的个性化环境中,客户为了做出购买决定,需要智能化地获取信息,不仅仅是商品的数量和价格,更重要的可能是产品的手册、安全保证、技术指标、售后服务、图片文件等等。
(2) 信息的及时性和准确性。无论在企业内网还是外网,信息的更新越来越快,企事业单位的信息生产量越来越多,且呈现成倍增长的趋势,企事业单位更需要的是一个功能强大、可扩展的、灵活的内容管理技术来满足不断的信息更新、维护,这时如何保证信息的准确性和真实性将越来越显得重要。
(3) 企业内外网统一的需求增长。随着企事业单位信息化的建设,内联网和外联网之间的信息交互越来越多,优秀的内容管理系统对企业内部来说,能够很好地做到信息的收集和重复利用以及信息的增值利用, 对于外联网来说,更重要的是真正交互式和协作性的内容。
国外从事内容管理软件研发的主要厂商包括Vignette,Interwoven, BroadVision, Openmarket,ATG, Allaire, Documentum, Hummingbird等,这些公司CM产品和解决方案专业性很强,大多基于J2EE等平台,功能丰富,主要面向企业级用户,是CM市场的主要厂商。还有一些更窄的专业厂商提供内容管理某个阶段需要的功能,如Verity 提供知识检索,Micromedia 提供内容创作平台,Akamai和Inkitomi 提供内容分发管理技术等。与此相反,Microsoft, IBM, oracle等公司提供通用平台性CM解决方案。但是目前CM市场仍有很多不完善的地方,包括:
在这个全新的市场中很难找到一个CMS满足用户的所有需求。
有些CMS只是单纯的信息发布工具而以,称不上内容的收集和再利用更谈不上知识管理的概念,最多只是一组网站建设工具软件而已。
所有产品的可视链接都非常差,只有极少数厂商能够提供可视软件,这些软件都不是交互式的,不能用作管理工具。
CMS都有可能包括些什么?
隐藏在内容管理系统(CMS)之后的基本思想是分离内容的管理和设计。页面设计存储在模板里,而内容存储在数据库或独立的文件中。当一个用户请求页面时,各部分联合生成一个标准的 HTML 页面。
一个内容管理系统通常有如下要素:
文档模板
脚本语言或标记语言
与数据库集成
内容的包含物由内嵌入页面的特殊标记控制。这些标记对于一个内容管理系统通常是唯一的。这些系统通常有对较复杂的操作的语言支持,如 Python, Perl, 或 Java 等。
内容管理系统对站点管理和创造编辑都有好处。这其中最大的好处是能够使用模板和通用的设计元素以确保整个网站的协调。作者只需在他们的文档中采用少量的模板代码,然后即可把精力集中在设计之上的内容了。要改变网站的外观,管理员只需修改模板而不是一个个单独的页面。
内容管理系统也简化了网站的内容供给和内容管理的责任委托。很多内容管理系统允许对网站的不同层面人员赋予不同等级的访问权限,这使得他们不必研究操作系统级的权限设置,只需用浏览器接口即可完成。
其他的特性如:搜索引擎、日历、Web 邮件等也会内置于内容管理系统 CMS 内,或允许以第三方插件的形式集成进来。
如何开发CMS
内容管理系统是一个很泛的概念:从商业门户网站的新闻系统到个人的Weblog都可以称作发布系统。
框架型:本身不包含任何应用实现,只是提供了底层框架,具体应用需要一定的二次开发,比如Cocoon,Vignette;
应用型:本身是一个面向具体类型的应用实现,已经包含了新闻/评论管理,投票,论坛,WIKI等一些子系统。比如:postNuke xoops等;
但无论如何,在发布系统选型之前,首先了解自己的实际需求是最重要的:想根据现成系统将自己的需求硬往上照搬是非常不可取的。访问量,权限控制和各种功能需求。每个模块和功能自己都比较清晰一点以后,再去网上找找类似的实现:你会发现其实每个环节到目前上都有比较成熟的实现了,而且还在不断完善和发展中,如果没有:你的需求太特殊,或者可以尝试分解成更小的系统组合实现。
内容管理系统被分离成以下几个层面:各个层面优先考虑的需求不同
1,后台业务子系统管理(管理优先:内容管理):新闻录入系统,BBS论坛子系统,全文检索子系统等,针对不同系统的方便管理者的内容录入:所见即所得的编辑管理界面等,清晰的业务逻辑:各种子系统的权限控制机制等;
2,Portal系统(表现优先:模板管理):大部分最终的输出页面:网站首页,子频道/专题页,新闻详情页一般就是各种后台子系统模块的各种组合,这种发布组合逻辑是非常丰富的,Portal系统就是负责以上这些后台子系统的组合表现管理;
3,前台发布(效率优先:发布管理):面向最终用户的缓存发布,和搜索引擎spider的URL设计等……
内容管理和表现的分离:很多成套的CMS系统没有把后台各种子系统和Portal分离开设计,以至于在Portal层的模板表现管理和新闻子系统的内容管理逻辑混合在一起,甚至和BBS等子系统的管理都耦合的非常高,整个系统会显得非常庞杂。而且这样的系统各个子系统捆绑的比较死,如果后台的模块很难改变。但是如果把后台各种子系统内容管理逻辑和前台的表现/发布分离后,Portal和后台各个子系统之间只是数据传递的关系:Portal只决定后台各个子系统数据的取舍和表现,而后台的各个子系统也都非常容易插拔。
内容管理和数据分发的分离:需要要Portal系统设计的时候注意可缓存性(Cache Friendly)性设计:CMS后台管理和发布机制,本身不要过多考虑”效率”问题,只要最终页面输出设计的比较Cacheable,效率问题可通过更前端专门的缓存服务器解决。
此外,就是除了面向最终浏览器用户外,还要注意面向搜索引擎友好(Search engine Friendly)的URL设计:通过 URL REWRITE转向或基于PATH_INFO的参数解析使得动态网页在链接(URI)形式上更像静态的目录结构,方便网站内容被搜索引擎收录;
都有哪些CMS提供商
Vignette. 奥斯汀, TX Vignette公司,网站内容管理系统的领导者,今天宣布在中层楼资金上它取得了1亿4千万美元,成为奥斯汀基础软件公司中最大的私人资产投资,同时也使Vignette成为在奥斯汀发展最快的互联网软件公司。 Vignette 公司,作为全世界网站内容应用系统的领导者,为公司们提出了解决方案——在互联网上建立非常成功的商业。 Vignette的王牌产品是StoryServer 3,它能使公司以应用软件(如在线发布、知识管理和复杂电子商务系统)为基础建立、管理和发布服务,最终加速和提高客户的忠实度和持续力。超过75个一流公司,包括Ziff- Davis' ZDNet, First Chicago NBD, Bay Networks 和 CNET ,使用StoryServer 3 ,每天提供2500万个网页浏览。 StoryServer3 获得了5个行业奖励,包括UPSIDE杂志的”网络基础组织类最活跃的私人公司” 。 它的 V/5 系列是一套应用软件包,设计用来为门户、B2C 和 B2B 市场需求提供内容管理。 V/5系列具有高度的可定制化能力和广泛的功能,它包括内容和模板的开发、个性化定制和发布。但是,它的多数功能还需要开发。
Documentum. Documentum 是文档管理解决方案的长期供应商。带着它的4i 网站内容管理(WCM)版本,公司有力地进入了CM舞台,它提供了一个解决方案来支持具有在线而动态的内容的电子商务应用软件。对大中型组织来说,它也是一个健全的可扩展的网站内容管理解决方案。
Eprise. Eprise的 Participant Server 2.6.6是该公司内容管理的产品,它为大型商务和.com提供商业应用软件,包括互联网、企业内部网和公共网站。该产品能促进内容添加、修改和全球发布。 Participant Server 的主要组件包括内容中心、操作中心、共享中心和内容分配套件。产品为投稿和创造提供基于网络的界面,同时内容分配组件处理适于交易的内容分配。 A single Web based administrative interface is a plus because administration can be distributed across the organization. 单一的基于网络的管理界面是附加的,因为管理在组织范围内可以是分布式的。
Interwoven. Interwoven的 TeamSite 4.5是横向聚焦的网站内容管理解决方案,它向财富500强和全球2000个上市公司提供企业范围的网站内容管理。TeamSite 的管理和组成能力通过桌面和基于Java的接口提供,这种桌面和接口作为操作系统的一部分出现。用户可以通过Windows Explorer把内容拖放到存储库中。
Xpedio. Xpedio CMS 4.0是全球 2000 B2B 和 B2E 公司所用的解决方案包,它为没有技术的用户提供了容易使用的网站建设能力。该产品在企业内部互联网、外部互联网和电子商务网站上促进了内容的快速发展和管理。在管理和发布内容方面,它是强大的解决方案,它提供具有分布式管理能力的创作工具、安全、发布的灵活性和完全基于浏览器的界面。
Ncompass. NCompass Labs于2001年4月通过微软成立,现在它是微软的子公司。 Resolution 3.1是Ncompass的浏览器,以网站内容管理解决方案为基础,在2001年底,它做为微软的产品(称为微软内容管理服务器)再次发布。
Open Market. Open Market 的Content Server 3.1是 J2EE兼容的内容管理解决方案,它嫦虺霭妗⒚教搴徒鹑诜务市常Open Market 把内容服务器定位为推动以内容为中心的电子商务应用软件的产品,它处理访问者、客户和合作者之间的交互。该产品有用于管理和组织的网络界面,包括了一个个性化的引擎和用于发布的应用软件服务器。
BroadVision. BroadVision 把应用方法用于内容管理,主要目标是B2B, B2E 和 B2C 市场。 BroadVision以应用软件程序包的形式出售产品,如出售给附带商业、合作商业、市场和雇员自我服务。内容管理解决方案也独立地出售。
FileNET. FileNET 是文档管理市场的传统领导者,现在它集中精力于生产电子商务应用软件的Panagon生产线。它的网站内容管理套件包括Panagon 内容服务(PCS)、Panagon 网络发布者(PWP)、Panagon 网络服务(PWS)和Panagon 电子流程。FileNET套件主要面向于金融、保险、政府、电信、公共事业和制造业。FileNET把它的网站内容管理套件定位在内容管理的全部解决方案,它贯穿内容的生命周期,从创造到审批、发布和分配。然而,在它目前的版本中,产品在核心网站内容管理的功能性上需要重大发展,如个性化和动态内容的表达。
Megellan. 2000 年7月,Gauss Interprise 和美国软件开发者Magellan 合并,主要销售它的内容管理系列 Versatile Internet Platform (VIP)。VIP定位于企业管理内容、网站内容和门户的平台。对于集中的环境,产品系列有适应需求的基本功能,包括基于网络的管理,单一和大批的输入、第三方厂商提供的基本库服务、以及用于分布式内容创造的模板设计工具。
InStranet. InStranet 成立于1999年,总部设在纽约,并且在巴黎设有欧洲总部。公司的王牌产品是InStranet 2000 1.5,它是一个浏览器和基于Java的网站内容管理解决方案。产品聚焦于,在B2B和雇员工作环境下,向企业内部互联网和外部互联网发布业务文件和内容。InStranet 2000 1.5在 J2EE兼容的应用服务器上运行,已在BEA WebLogic, IBM WebSphere 和 iPlanet 应用服务器上经过检验。
Mediasurface. Mediasurface 的总部设在伦敦,它的美国办事处在纽约和弗朗西丝科。公司为组织提供管理内容软件,用于企业内部互联网和外部互联网。公司的核心产品是 Mediasurface 3.5,它瞄准垂直市场,包括金融服务、政府、教育、卫生保健、IT服务、媒体、出版和广播、零售和消费服务。
Six Open Systems. Six Offene Systeme GmbH 在美国称为Six Open Systems (Six) ,于1991年在德国成立。Six在德国有重要的消费群,它以产品Six CMS 4.0打入美国市场。该产品是由内到外的、以浏览器为基础的解决方案,它用来帮助媒体出版商简化和管理内容设计及网页和门户、互联网、企业内部互联网等的设计。
Starbase. Starbase 销售合作产品,该产品为电子商务应用软件创造、管理代码和内容。2001年2月, Starbase收购了worldweb.net 和它的产品 Expressroom I/O 、以及基于Java 和 XML的网站内容管理解决方案。Starbase正把Expressroom I/O添加到它的代码和内容管理解决方案的协作套件中。
国内用的比较多的有Active Context、turbocms、cms4i,不过这些都是纯商业性系统,价格很高,一般个人建站,建议选取一些国外比较有名的开源系统,如 Mambo、Drupal、Tikiwiki、PhpNuke、 PostNuke、Xoops、Tikipro、不过这些全是基于php + mySQL的,众所周知,php和mysql是免费的嘛^__^

[资源]CMS内容管理系统的设计和选型

mikel阅读(937)

内容管理系统(CMS)的设计和选型


内容摘要:

内容管理系统概述

内容管理系统是一个很泛的概念:从商业门户网站的新闻系统到个人的Weblog都可以称作发布系统。

  • 框架型:本身不包含任何应用实现,只是提供了底层框架,具体应用需要一定的二次开发,比如Cocoon,Vignette;
  • 应用型:本身是一个面向具体类型的应用实现,已经包含了新闻/评论管理,投票,论坛,WIKI等一些子系统。比如:postNuke xoops等;

但 无论如何,在发布系统选型之前,首先了解自己的实际需求是最重要的:想根据现成系统将自己的需求硬往上照搬是非常不可取的。访问量,权限控制和各种功能需 求。每个模块和功能自己都比较清晰一点以后,再去网上找找类似的实现:你会发现其实每个环节到目前上都有比较成熟的实现了,而且还在不断完善和发展中,如 果没有:你的需求太特殊,或者可以尝试分解成更小的系统组合实现。

内容管理系统被分离成以下几个层面:各个层面优先考虑的需求不同

  1. 后台业务子系统管理(管理优先:内容管理):新闻录入系统,BBS论坛子系统,全文检索子系统等,针对不同系统的方便管理者的内容录入:所见即所得的编辑管理界面等,清晰的业务逻辑:各种子系统的权限控制机制等;
  2. Portal系统(表现优先:模板管理):大部分最终的输出页面:网站首页,子频道/专题页,新闻详情页一般就是各种后台子系统模块的各种组合,这种发布组合逻辑是非常丰富的,Portal系统就是负责以上这些后台子系统的组合表现管理;
  3. 前台发布(效率优先:发布管理):面向最终用户的缓存发布,和搜索引擎spider的URL设计等……

内 容管理和表现的分离:很多成套的CMS系统没有把后台各种子系统和Portal分离开设计,以至于在Portal层的模板表现管理和新闻子系统的内容管理 逻辑混合在一起,甚至和BBS等子系统的管理都耦合的非常高,整个系统会显得非常庞杂。而且这样的系统各个子系统捆绑的比较死,如果后台的模块很难改变。 但是如果把后台各种子系统内容管理逻辑和前台的表现/发布分离后,Portal和后台各个子系统之间只是数据传递的关系:Portal只决定后台各个子系 统数据的取舍和表现,而后台的各个子系统也都非常容易插拔。
内容管理和数据分发的分离:需要要Portal系统设计的时候注意可缓存性(CacheFriendly)性设计:CMS后台管理和发布机制,本身不要过多考虑“效率”问题,只要最终页面输出设计的比较Cacheable,效率问题可通过更前端专门的缓存服务器解决。
此外,就是除了面向最终浏览器用户外,还要注意面向搜索引擎友好(Searchengine Friendly)的URL设计:通过URLREWRITE转向或基于PATH_INFO的参数解析使得动态网页在链接(URI)形式上更像静态的目录结构,方便网站内容被搜索引擎收录;

---------------    ---------------     ---------------
|新闻管理子系统|   | BBS论坛子系统|    | 商城子系统  |
---------------    ---------------     ---------------
|       \     /    |     \           /   内
|        ----------|---   \         /    容   <== 业务子系统(零件生产)
|           /      |   \   \       /     管
---------------      |    ---------------  理
|专题制作子系统|     |    |全文检索子系统|
---------------      |    ---------------
\       |          /
-------------------------|---------------------------------------------
\     |        /            频
---------------             道   <== Portal系统(产品组装)
| Portal 系统 |             管
---------------             理
|
-------------------------|---------------------------------------------
|                     前
|                     台   <== 发布系统(分发代理)
---------------              发
|前台发布系统 |              布
---------------
/        \
/          \
---------------      ---------------
| 用户浏览器   |     |Search Engine|
---------------      ---------------

这里,我把在内容发布系统选型中找到的一些资料总结如下:

内容管理系统的选型

关键词:CMS Content Manage System

CMS行业研究
http://www.cmswatch.com
http://www.cmsreview.com
http://www.cmsinfo.org

CMS讨论邮件列表
http://www.cms-list.org

商业软件和开源项目列表:
http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/

推荐:基于XML的发布框架
http://cocoon.apache.org/

具体实现复杂程度可能会根据需求的不同而不同,但越是大型的系统越是需要分工:将内容(数据),表现(模板)和应用逻辑(程序)尽可能分离和对这3者的管理。

Portal—门户系统
Open source Projects:
http://jportlet.sourceforge.net/
Apache Software Foundation: Jakarta JetSpeed 1.3
JetSpeed home page: http://jakarta.apache.org/jetspeed/site/index.html
JetSpeed Portlet API: http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/
http://www.liferay.com/home/index.jsp
http://basicPortal.com/
http://www.jahia.org/
http://jporta.sourceforge.net/
商业软件:
BEA WebLogic Portal – http://edocs.bea.com/wlp/docs81/javadoc/com/bea/Portal/model/Portlet.html
IBM Websphere Portal – http://www.software.ibm.com/wsdd/zones/Portal/
Oracle Portal Developer Kit – http://Portalstudio.oracle.com/
其它:
PSML – http://jakarta.apache.org/jetspeed/site/psml.html
BEA: Web Logic Portal 4.0 http://www.bea.com/products/weblogic/Portal/index.shtml
IBM: WebSphere Portal 2.1 http://www-4.ibm.com/software/webservers/Portal/
iPlanet: iPlanet Portal Server 3.0 http://www.iplanet.com/products/iplanet_Portal/home_Portal.html
Oracle: oracle 9i Portal http://www.oracle.com/ip/deploy/ias/Portal/index.html
SAP Portal: http://www.iviewstudio.com
Epicentric Portal: http://www.epicentric.com/solutions/products/efs/
参考:
Wafer:Java开发框架研究
http://www.waferproject.org/index.html
门户(Portal)系统相关开发框架:
http://udoo.51.net/mt/archives/000011.html

广告管理系统

关键词:ad server

广告系统和内容的分离,可以大大降低系统之间的关联度。
 
专业行业研究网站:
http://adres.internet.com
相关厂商和开源项目:
http://directory.google.com/Top/Computers/Programming/Languages/PHP/Scripts/Ad_Management/?il=1
http://directory.google.com/Top/Computers/Software/Internet/Servers/Advertising/?tc=1
http://www.jspin.com/home/apps/admanage?cob=winedit
http://www.scriptdex.com/dex/php_ad_management.shtml

推荐:
http://www.phpadsnew.com/功能性比较强
http://oasis.sourceforge.net/免费 基于日志记录和定期导入MYSQL统计,可以负载50万请求/每小时 以上
如果看重广告的第3方特性,可以选择第三方服务:
http://www.doubleclick.net/
http://www.allyes.com/

论坛/社区系统

关键词: BBS FORUM
论坛软件介绍:
http://directory.google.com/Top/Computers/Internet/Web_Design_and_Development/Message_Boards/
推荐:
http://www.phpBB.com PHP + MySQLopen source
http://www.vbulletin.com/order/PHP + MySQL  有付费的商业支持85-160$
http://www.jivesoftware.com/products/pricing.jsp商业论坛系统,1000$-2500$ 有知识库扩展应用
http://yazd.yasna.com/features.jsp基于 Java

所见即所得(WYSIWYG)编辑器

在内容的录入管理方面,所见即所得是比较重要的,这样可以大大简化对系统中布局排版的需求。
基于浏览器的WYSIWYG(所见即所得)编辑器是CMS设计中,编辑工具的主要考虑方面。目前主要是通过JavaScript调用IE或其他浏览器的内置方法实现。其中基于IE5.5浏览器的实现最为简洁。这里有一个完整的例子:
Building a WYSIWYG HTML Editor Part 1/2
Building a WYSIWYG HTML Editor Part 2/2
主要功能:

  • 能够通过JavaScript实现的基本功能:加粗,斜体字,居中,添加链接,添加图片,模式切换:HTML和文本模式的切换,
  • Word垃圾代码过滤
  • 图片上载接口:图片上载最好通过其他独立模块实现。

选型指标:

  • 不依赖服务器端代码:只通过JAVASCRIPT或客户端控件实现代码,可以保证以后系统迁移的方便。
  • WORD垃圾代码过滤

可视化编辑器大全:
http://www.bris.ac.uk/is/projects/cms/ttw/ttw.html
推荐:
http://www.aine.be/aynhtml/

图片/文件上传组建

图片和文件等非结构化数据还是分别使用另外的服务解决比较好。这样可以大大简化CMS本身的复杂程度。
推荐:
文件上传:
Apache Commons项目
http://jakarta.apache.org/commons/
ImageJ:图片处理缩略图生成和水印等
http://rsb.info.nih.gov/ij/
关于Blog系统的选型,目前主流的基于PHP的包括:
· Nucleus 3.0 www.nucleuscms.org
· pmachine 2.3 www.pmachine.com
· b2evolution 0.9.0.3 www.b2evolution.net
· Serendipity 0.6 www.s9y.org
· WordPress 1.2 www.wordpress.org
· bBlog 0.7.3 www.bblog.com
· pLog 0.3.1 www.plogworld.org
· Simplog .9 www.simplog.org
· Textpattern 1.18a www.textpattern.com

[教程]ASP.NET中CMS的体系结构

mikel阅读(823)

在公司的例会上,你的老板给你布置了一个新任务。这个任务听起来一点也不难,你所要做的一切就是为你公司的网站建立一个“简单”的基于Microsoft .NET的内容管理系统(CMS)。当你离开会议厅时,你可能刚刚开始觉得蹊跷:为什么没有人试图得到这个任务,你甚至记起当宣布这个项目时,你的几个同事都躲了起来,这究竟是怎么回事?
你也许还不知道,这个新任务会逼着你必须学习许多新技术,如HTML、JavaScript,、ASP.NETC#SQL、XML、 ADO.NET、 .NET remoting、网络服务等。你还需要掌握几个概念,如n层(n-tier)体系结构、数据库开发、版本控制、工作流(workflow)、个人化(personalization)和安全等等。
无论你是否认同这一点,你无疑是得到一个好项目,因为在开发过程会逼得你学到很多东西。唯一的遗憾就是没有人会立即认识到你在完成这个“简单的”项目后变得多么博学了。
有一大堆文章谈到建立你那个“简单”的CMS(内容管理系统)所需要的内容。沿着这条路走下去,我们将探索与CMS开发有关的众多技术和概念。我们在开篇文章所提到的技术在会在我们的实现样本中一一出现。那让我们从基本体系结构(即三层和多层体系结构)来开始本系列文章吧。
CMS三层体系结构
我曾在开发CMS(内容管理系统)三层体系结构上受到好评,不过那已经是好久以前的事了。CMS三层体系结构与标准三层客户端/服务器体系结构是基本对应的。CMS三层体系结构没有什么难以理解的内容,都是一些常识性的东西。它的每一层对应着一个体系结构中必须的元素:交互(interaction)、操作(manipulation)以及存储。这三层是:
表示层——处理与用户的交互、交流。
事务逻辑(business logic)层——处理用户所需要的信息。
数据库层——存储系统所处理的所有数据。
图A中直观的表示了CMS三层体系结构。图A所示的层分别位于不同的机器上,实际上,多个层可以存在于同一台计算机中,但是将它们分布在多台计算机中可以更好的分配CMS系统的负荷。

图A
CMS三层体系结构
CMS n层体系结构
简单的说,CMS n层体系结构就是把CMS三层体系结构的各个层分解为多个层,如图B所示。把层进行分解的好处是使得各个层更好的协调工作从而提高了系统性能;同时这也使得系统分布在更多的计算机上,这样可以减少系统由于指定计算机耗时过多而造成的瓶颈,从而提高了系统负荷。

图B
CMS n层体系结构
表示层是什么?
尽管表示层并不见得比其它层更重要,但是它几乎得到了全部的荣耀——因为它是唯一的CMS用户可以看到的层。这个层负责CMS与用户的交互工作。
表示层实际上由两部分组成:即Web客户端和Web服务器。Web客户端驻留在用户计算机中,通常用来接受Web浏览器的表格(form)。Web服务器位于Web主机地址上,用来生成动态Web页面和组成CMS系统的表格。
Web客户端与Web服务器端通过“请求——回应”的方式来相互通信。Web客户端向Web服务器发出请求,Web服务器根据请求作出回应。
Web客户端使用的是HTTP的请求方式。如:
GET /index.html HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
Host: www.contentmgr.com
Web servers respond using the HTTP response. For example:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 12 Jul 2002 19:19:52 GMT
Connection: Keep-Alive
Content-Length: 1270
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQQGQGDC=MOFPDBPCPNIBACIBDCIOFCCL; path=/
Cache-control: private
…HTML嵌入了Web服务器发出的回应,该回应用来指示浏览器显示什么内容;JavaScript用来实现客户端的基本功能。最近以来,其它技术,如Java applet和ActiveX组件开始流行了,不过Web服务器在最初发出的回应中,绝大多数还是使用HTML,这包括了服务器发出的用于通知客户端使用何种HTML以外的技术来接管后面的执行过程的回应。
事务逻辑层是什么?
重申一次,事务逻辑层的功能可以放到单个的服务器上(三层体系结构),也可以分布到多个服务器上(n层体系结构)。事务逻辑层的功能包括以下三个部分:
访问(获取和保存)数据库层的数据。
从表示层获取数据。
执行必要的运算并且/或者处理数据。
事务逻辑层从数据库层获取数据,并根据表示层的需要来对数据进行处理。事务逻辑层也可以获得表示层提供的数据,并根据数据库层的需要对其进行处理。
CMS事务逻辑层的许多逻辑与其它两个层的交接(interfacing)有关。在Microsoft.NET下,由于ADO.NET、.NET remoting和Web服务器的帮助,这种逻辑的复杂性大多都被降低了。有了.NET之后,该层的最复杂的逻辑就是用于处理事务逻辑而进行计算和处理数据任务了(用C#或者Managed C++)。
什么是数据库层
数据库层的名字告诉了我们它的任务是什么了;它用来处理CMS数据。一个不太引人注意的地方就是,它的数据存储和检索功能并不限制于数据库。它可以是单个或者一系列平面文件(flat file),可能是XML格式。不过,数据通常还是存在数据库中。数据库的类型并不重要,因为对绝大多数CMS系统来说Microsoft SQL Server 2000与Oracle以及Sybase同样优秀(至少,你在Windows环境下)。也就是说,微软公司已经为Microsoft SQL Server 2000优化了.NET接口(interface);这可能会给它一个小小的优势(edge)。不过其它数据库提供商也没有闲着,微软的这个优势很快就会消失。
如果你不偏好某种数据库,你最好按通用的方式编写代码,这样你可以把任何数据库嵌入到你的CMS中。谁知道将来会怎样?今年所选择的数据库,明年你可能就不想再用了,是不是?
数据库层通常有它所在的计算机加载和访问。在大型的CMS中,通常在另一台计算机上保存一个镜像拷贝,这样可以在主机发生故障时,可以用它来顶替。
数据库层的内部工作过程、以及数据库本身,对一般的编程者来说是一个迷。开发者在本层的主要任务就是建立数据库、创建并载入数据库纲要(schema),偶尔也需要生成报表,还有一点就是要常常备份数据库。
选择哪一种体系结构?
选择哪一种体系结构(三层或者n层)取决于以下因素:
CMS 需要实现的功能
数据的数量
并行工作的用户数量
预期的增长
基本上,如果你的CMS系统将一直保持较小的规模,最好选择三层体系结构。相反,如果你估计CMS系统会越来越大,n层体系结构是一个明智的选择。
由于服务器间的通信量不高,三层体系结构更容易实现。但是在.NET中,并不一定要这么做。由于三层体系容易构建,所以可以早日投入使用。这样,如果市场要求很急迫,三层体系结构也可以作为大的CMS系统的暂时解决方案;把三层体系结构的方案几乎“无痛苦”的移植到n层体系结构是可行的。不过,你要认识到,拥有大量用户的三层体系的CMS系统很可能会超负荷的。
小结
现在你应该基本理解这两种主要用于CMS的体系结构。同时,你也应该可以科学的评估你应该使用哪一种体系结构。

[资源]开源的.net的CMS系统

mikel阅读(767)

几个.Net开源的CMS、Portal系统 最近打算花些功夫研究.Net环境下的CMS、Portal系统,很多优秀的开源CMS、Portal系统,都是PHP开发的,比如Xoops、 Mambo、Drupal,比起Php在OpenSource中的群星璀璨来,.Net CMS、Portal开源项目有点暗淡。在sourceforge上找了一个下午,把一些比较有成熟、有特点的项目下载下来准备研究。
一、DotNetNuke DotNetNuke
是一个.Net平台下,最负盛名的CMS系统,爱好者们都称它为DNN,开发语言是VB.Net。
其相关资源有:
Sourceforge上的项目地址:http://sourceforge.net/projects/dnn/
官方网址:http://www.dotnetnuke.com/
有汉化版本,国内有不少的研究者,主要集中在:http://www.dnnchina.net/,那里提供有很多的学习教程和Skin。 DNN是一个比较成熟的CMS系统,提供有大量的插件(Feed、相册等),目前最高版本是4.0,在.Net2.0框架下运行。
DNN是VB.Net开发的,很多开发者并不习惯VB.Net的风格,所以DNN爱好者创建了个C#版本的项目SharpNuke.NET。
Sourceforge上的项目地址:http://sourceforge.net/projects/sharpnukenet
官方地址为:http://sharpnuke.net/
二、dBlog Sourceforge
介绍说dBlog是asp和ASP.NET混合开发的,实际上主要还是asp环境下运行的CMS系统,这是一个轻量级的系统,其实主要用于Blog的发布,而并非Portal。
Sourceforge上的项目地址:http://sourceforge.net/projects/dblog/
官方地址:http://www.dblog.it/
比较有特点的地方就是blog、podcast的相关功能的实现。
三、Rainbow Portal
一 个酷酷的名字–Rainbow,使用C#开发,这个系统是在MS iBuySpy的基础架构上强化而来的,目前的Rainbow2006和iBuySpy项目已经很不一样了,大大的超出了很多,比起DNN来, Rainbow也有不少的优点,它支持多种语言,可以定制主体风格,可以创建工作流等。
Sourceforge上的项目地址:http://sourceforge.net/projects/rainbowportal/
官方地址:http://www.rainbowportal.net/
Rainbow在国内也有相关的研究:http://rata.cnblogs.com/
我发现Rainbow2006的安装有些问题,他的数据库创建脚本不适应大字符集的环境,我在简体中文的系统打开脚本查看,一些Insert的配置参数是乱码。
四、OmniPortal OmniPortal
并不是一个直接的应用程序,实际上是一个Portal的框架内核,可以在它的基础上建立任何的Web应用系统。对于一个Web开发者,OmniPortal提供了优秀的二次开发基础类库,虽然目前OmniPortal还不是一个Release版本,但是非常值得关注。
Sourceforge上的项目地址:http://sourceforge.net/projects/omniportal/
官方地址:http://www.omniportal.net/
由于OmniPortal是一个基础框架,因此参考文档相当重要,可是官方网站不知道为什么总连不上去,Sourceforge上又没有相关的文档,让人非常遗憾。
五、Ludico 这个Portal、CMS系统也不是一个正式版本的,去年11月份才开始的项目,但是我发现它的架构非常优秀,采用NHibernate.Net作为系统框架,因此可以作为一个很好的学习对象,值得关注之。
Sourceforge上的项目地址:http://sourceforge.net/projects/ludico/

[代码]ASP MVC Framework视图显示控制器返回结果

mikel阅读(786)

Controller控制器代码,用于返回List 的结果List给View视图显示用

public void FlashGet(String browserAddr)
{
//创建models
FlashGet flashGet = new FlashGet();
//根据url是否为空判断定向到页面
ViewData["test"] = "url is:"+browserAddr;
if (browserAddr==null)
{
RenderView("HowTo");
}
else
{
List<String> Result=flashGet.GetSWFS(browserAddr);
//返回结果给list
ViewData["list"] = Result;
RenderView("SWFList");
}
}

View视图代码,遍历List 的ViewData数据

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="SWFList.aspx.cs" Inherits="FlashSaver.Views.Home.SWFList" %>
<%@ Register TagPrefix="m" Namespace="FlashSaver.App_Code" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<%=ViewData&#91;"test"&#93;%>
<%
foreach (String path in (ViewData&#91;"list"&#93; as List<String>))
{
Response.Write(path+"<br/>");
}
%>
</asp:Content>

[代码]C#编写的搜索引擎

mikel阅读(968)

主要的代码分析如下:
///

/// 取得该URL网页内容数据.调用后面的分析函数。
///

private void GetHTML() {
if (_HTMLData != null) return;
Byte[] BinData;
try {
WebClient wc = new WebClient();
BinData = wc.DownloadData(_URL);
_HTMLData = Encoding.Default.GetString(BinData);
wc.Dispose();
}
catch (Exception) { Console.WriteLine(“Can not read this page!”); return; }
GetTitle();
GetMeta();
GetLink();
if (OnFinishAnalyze != null) { OnFinishAnalyze(this, new EventArgs()); }
Console.WriteLine(“Finish!”);
this.Dispose();
}
///

/// 分析URL里的Title
///

private void GetTitle() {
if (_Title != null) return;
//”(([\S\s]+))” 提取网页标题的正则表达式
Regex reg = new Regex(@”([\S\s]+)“, RegexOptions.IgnoreCase);
try{
Match m = reg.Matches(_HTMLData)[0];
if (m.Success) _Title = m.Groups[1].Captures[0].ToString();
}
catch (Exception) { _Title = “”; }
}
///

/// 解析Html代码里的超链接.获得子URL集.
///

private void GetLink() {
if (_ChildURLSet != null) return;
ArrayList urlset=new ArrayList();
//”]+>([^ <>]+)” //提取超链接的正则表达式
Regex reg = new Regex(“]+>([^<>]+?)“, RegexOptions.IgnoreCase);
MatchCollection mm;
try { mm = reg.Matches(_HTMLData); } catch (Exception) { return; }
urlset.Add(new QLinkURL(this._URL, “”, this._MetaWords,this._Title));
foreach (Match m in mm) {
urlset.Add(new QLinkURL(URLJoin(m.Groups[1].Captures[0].ToString()), m.Groups[2].Captures[0].ToString().Replace(” “,””), “”));
}
_ChildURLSet = (QLinkURL[])urlset.ToArray(System.Type.GetType(“QSplider.QLinkURL”));
}
private void GetMeta() {
if (_MetaWords != null) return;
//
Regex reg = new Regex(““, RegexOptions.IgnoreCase);
try{
Match m = reg.Matches(_HTMLData)[0];
if (m.Success) _MetaWords = m.Groups[1].Captures[0].ToString();
}catch(Exception){ _MetaWords = “”;}
}
public void Dispose() {
this._HTMLData = null;
this._ChildURLSet = null;
this._MetaWords = null;
this._Title = null;
}
public string URLJoin(string s2) {
s2=s2.Trim(_SplitChar);
if (s2.StartsWith(“http://”, true,null)) return s2;
if(s2.StartsWith(“/”)) s2.Substring(1,s2.Length-1);
if (_URL.LastIndexOf(“/”) > 9) _URL = _URL.Substring(0,_URL.LastIndexOf(“/”));
return (_URL + “/” + s2).Trim(_SplitChar);
}
主要工作的函数就是上面的几个了!这是一个爬虫的代码!
当然还有数据库的,还有web的!
下载地址如下:
http://59.70.157.222/QSearch.Splider.zip
http://59.70.157.222/QSearch.WebSite.zip

[教程]ASP.Net调试之三板斧

mikel阅读(710)

一、Config.web
用过ASP的人对它的调试应该是记忆深刻的。在整片整片的代码中找到那几个
出错的地方,难度可想而知。现在微软推出了ASP的更新换代产品ASP.NET。对于
ASP.NET的好处,我想很多网站都已经介绍了差不多的,不过对于ASP.NET的调试
讲得就不是很多了。所以,我就以我的一点个人经验写了这一篇文章。由于,我
也是接触ASP.Net不久,错漏之处在所难免,还请大家多多指正。好了,言归正传。
第一招:配置Config.web
一般,当我们写好的网页运行出错了,ASP.Net就会在页面上告诉我们程序有
错了,但究竟错在哪里,它是没有提示的。为了能让ASP.Net进一步提示我们出错
的信息。我们就有必要编辑Config.web中的配置信息。
可能还有很多刚刚接触ASP.Net的人不太了解Config.web这个文件。那我就顺便介绍一下。Config.web是ASP.Net的一个配置文件,它里面存放着关于ASP.Net的所有配置信息。当执行一个ASP.Net页面时,它会先到该页面所在的目录查找这个文件,如果没有找到,就往上一级目录找,一直到wwwroot目录。如果都没有,它就会调用X:\WINNT\Microsoft.NET\Framework\ v1.0.2204目录中的Config.web文件(X为系统目录)。所以,如果大家要想改变所有页面的配置,就应该改WINNT目录中的那个 Config.web。另外顺便说一下,当你打开Config.web后,你会发现这是一个XML结构的配置文件。
好了,介绍解说这么多了,回到我们的主题。现在你要做的第一步就是:打
开或者新建一个Config.web文件。我们分开来说:
如果是新建,你就需要用文本编辑器新建一个新的文档,然后往里面输入下
面的语句:



输完后选择另存为,输入文件名Config.web,将它保存到当前页面相同的文件夹中即可。如果是修改一个已经存在的Config.web文件,你只需要用文本编辑器打开它,然后在之间的任意地方输入:
即可。
二、<%@%>
上一次我们说到配置Config.web文件,让出错信息给出更多的提示。可光有
提示又有什么用呢?“最多就是知道错在哪里,可我还是不会改呀!”别急,别
急,看看咱们这篇文章叫什么来着,“三板斧”,那当然是一斧赛过一斧啦!上
次那招不够厉害,我们还有下面的那,所以别急啊,且听我慢慢道来。
第二招:Trace追踪
用过ASP的人应该都用过下面的语句吧:
Response.Write XXX
Response.End
虽然我不太喜欢ASP的编程方法,但是这种方便的调试手段还是很好的。换用
ASP.Net以后,我发现ASP.Net提供一种更强大的调试方法,它就是我们现在要说
的Trace。所谓Trace功能就是在网页的最前面加上一些标记,至于是什么标记呢?嘿嘿,我不能马上告诉你(不好,臭鸡蛋……哇!)。我是说,我要先介绍一点基础的知识啦!
我不知道大家对ASP.Net的页面标示了解多少,为了下面讲解的方便,我还是
概要的介绍一下吧!ASP.Net的页面标示指的是在每一个ASP.Net页面最上面,用
<%@和%>括起来的语句。它的功能是用来确定在处理ASP.Net文件的时候,需要系
统做一些什么特殊的设定。具体的语法如下:
<%@ directive attribute=value %>
其中:directive就是页面标示符;attribute是该标示符对应的一些属性。
注意:在属性之间需要空格,而在”=”之间不能有空格。
ASP.Net现在包含以下7种标识
@ Page,
@ Control,
@ Import,
@ Registe,
@ Assembly,
@ OutputCache,
@ Webservice
我们用得最多的就是@ Page标示,而现在我要讲的Trace功能,也要用到@ Page。(关于这七个标示的具体应用,我会在以后发贴讲述的。)好了,回到我们的主题。要用Trace功能,你必须在页面的最上面加上:<%@ Page Trace="true" %> 这句话。加好后,你就可以看看页面的运行情况了。运行该页面。你会发现在页面的下半部分出现了一大堆的数据。下面就来解释一下这些数据的含义:
Request Details:通过Request方式向浏览器所读取的数据;
Trace Information:事件发生或程序执行的过程信息;
Control Tree:网页所使用的控件及控件之间的阶层关系;
Cookies Collection:网页所使用的Cookie信息;
Headers Collection:浏览器的表头信息。
Server Variables:Server变量的数据信息。
有了这一大堆数据,我们的工作就好做多了,但且慢欢喜,Trace还提供了更强大的功能,请接着看下去。
除了让ASP.Net页面显示这一堆数据外,我们还可以将程序中用到的变量的
值实时的显示在Trace Information区段中,其方法是调用Trace.Warn或Trace.Write两个方法。他们的用法如下:
Trace.Warn(“Description”,Variables);
Trace.Write(“Description”,Variables);
我想你们一定会问,这两个有什么区别呢?回答是:在功能上,这两个是一模一样的,只是在显示上,Trace.Warn将会以红色字体表示。
三、 查错神器Debugger
要用好的兵器,没点准备是不行的,所以我们就先来做点准备运动。
1.Config.web的设定:还记得第一招中讲的吗?对了,还是这个文件,打开它,向里面加入这条语句

说明:由于在预设情况下,ASP.Net会以正常模式来运行页面,为了能让它以查错模式编译网页,我们就必须加入这句语句。
2.启动查错工具DbgUrt.exe:这个程序放在x:\Program Files\Microsoft.Net\FrameworkSDK\GuiDebug目录里,文件名是DbgUrt.exe
3.激活查错功能:
运行DbgUrt.exe程序
–〉选取菜单Debug/Processes
–〉在出现的Processes对话框中选中Show system processes和Show processes in all sessions
–〉在Available processes列表框的最下面找到xspwp.exe(如果没有,请运行一.aspx页面,然后按Refresh键。)
–〉选取该文件后,按Attach键
–〉在出现的对话框中选中Common Language Runtime,然后按OK,回到Processes对话框
–〉按Close键
–〉在程序的主菜单中选取File/Open/File,打开你想要检测的文件。
下面正式开始页面调试。
利用DbgUrt.exe打开欲调试的文件后,我们要做的第一件事情就是:设置断
点。是不是觉得和其它Windows应用程序的调试很像(什么很像?简直就是一模
一样吗!)加断点的方法很简单,先决定需要加断点的地方,然后将光标移动到
该行,按下F9或者在该行的最前面点击鼠标左键,该句前面就会出现一个问号的
标记,这就是断点!我们当然可以设定多个断点,只要你喜欢。你要是像取消一
个断点,只需在该行重复设置断点的动作即可。
设置好断点后,只要使用浏览器浏览被调试的页面,当程序运行到断点的位
置时,它就会自动弹出DbgUrt.exe,并且停在刚才的断点位置。这是,我们就可
以利用Command Window-Immediate窗口检查变量的值了。
当我们想继续执行当前页面时,我们有几种选择:
1、按F5键,运行到下一个断点,若没有断点,则运行完该页面;
2、按F11键,执行单步操作;
3、按F10键,同样是单步操作,但它会进入子程序(函数)中的语句。