RSS 2.0 Feed
Community Server
Community Server 相关内容
摘要:经过大半年的时间,CommunityServer终于发布了CS2.0RTM,带源码:http://communityserver.org/files/40/releases/entry516270.aspx...[阅读全文]

posted @ | Feedback (7) | Filed Under [ Community Server ]

摘要:费了好一袋烟工夫把CommunityServer升级到了Asp.Net2.0平台,一点心得: vs2005可以很方便的帮我们把vs2003开发的asp.net1.1版本项目升级到vs2005开发的asp.net2.0版本,从vs2005里面打开vs2003的解决方案或者项目文件,会有向导帮我们自己完成升级工作。一部分asp.net1.1的项目做完这个工作就足够了。 不过更多的时候不会这么顺利,还要注意一些问题: vs2003开发的asp.net1.1程序,不会检查aspx、aspcx等文件中的语法错误,而vs2005会检查项目中所有的aspx、aspcx等文件中的语法,所以如果有语法错误,会导致编译无法通过。 vs2003中,如果用的是默认的代码绑定方式,那么在aspx文件(以aspx文件为例,ascx文件也有这个问题)中申明的服务器端控件,会在aspx文件对应的aspx.cs文件中,生成一个对应的申明,例如aspx中有一个TextBox,ID是MyTextBox,那么在aspx.cs中,会申明一个"protected TextBox MyTextBox;",而在vs2005中,这个申明是多余的,所以升级后要去除这些多余的申明。 如果有程序采用了asp.net1.1下的Membership——使用MemberRole.dll,要升级到asp.net2.0下的Membership,需要做如下工作: 删除所有项目中对"MemberRole.dll"的引用,添加"System.Configration"的引用 改变命名空间ScalableHosting.Profile -> System.Web.Profile;ScalableHosting.Security -> System.Web.Security; 同时添加using System.Configuration; 移除所有MemberRole.dll相关的Membership配置,参照以前的Membership配置,增加asp.net2.0支持的Membership配置,更新Membership的存储过程。 CCS1.1 for asp.net2.0的下载:http://www.communityserver.cn/builds...[阅读全文]

posted @ | Feedback (14) | Filed Under [ Community Server Web技术 ]

摘要:增加了很多激动人心的新功能! 下载地址:http://communityserver.org/files/40/betareleases/entry502445.aspx没有提供源码,到Release才会提供源码下载...[阅读全文]

posted @ | Feedback (9) | Filed Under [ Community Server ]

摘要:发现CommunityServer(以下简称CS)系统在数据量多和访问量大的情况下对资源的占用还是比较厉害,尤其是Sqlserver,于是尝试进行对其进行优化,以下是对其优化的一个过程和参考方案,算是抛砖引玉: 针对SQLServer资源占用较高的情况,开始具体分析到底是哪些存储过程比较占用资源,在服务器上启动SQLServer的Profiler工具,对所有执行的存储过程、SQL进行记录,在记录了两个小时的日志后,下载到本地进行分析,分析结果发现,对于最新图片、分页读取帖子、最新Blog这类的存储过程执行较为频繁,且执行时间较长,尤其是其中的“最新图片”的存储过程,因为join了若干table,所以执行时间特别长,如果重启SQLServer后执行甚至有时超过20秒,所以在第一次打开首页时特别慢,当缓存更新后也是特别慢。 因为这部分内容都更新相对比较频繁,所以即使Cache也效果不是很理想。以其中论坛部分为例,首先要从cs_Threads表的几十万条记录中找到符合条件的ThreadID,再从中取出第一页所需要的最新N(假设为20)个ThreadID,然后根据这20个ThreadID从cs_Threads和cs_Posts表进行Join取得最新20篇新帖子,对于第一步:“从cs_Threads表的几十万条记录中找到符合条件的ThreadID”这个的SQL进行优化的难度比较大,而且效果也不是很明显。 对Logo再次分析,发现对于大多数用户来说,一般关注的是最新的帖子,所以大部分对于分页读取帖子的请求多数集中在第一页,就如我们进入一个板块,往往只看第一页的帖子,同样的也包括“最新图片”、“最新Blog”和“最新帖子”。于是有了个初步的想法,对cs_Threads表中,每个SectionID对应的Thread记录都用一个专门的表例如cs_CachedThreads,Cache上M条(M>=N),这个表中每个SectionID对应的Thread只保留最新的M条,并且和cs_Threads表保持同步,这样,cs_CachedThreads表记录一般保持在几千条以内。当需要读取最新的第一页数据时,就从cs_CachedThreads表读取,相对于从几十万记录的cs_Threads表读取来说,执行时间要少很多。 在这样优化一次以后,网站首页和各版面首页的执行效率还是提高不少,SQLServer的性能也有所提高。...[阅读全文]

posted @ | Feedback (10) | Filed Under [ Community Server ]

摘要:肯定有这样子的需求:我们希望能用快捷键代替鼠标点击做一些事情,例如一个典型的应用就是论坛上常用的Ctrl + Enter 快捷发帖子。就以Ctrl+Enter快捷发帖子为例,实质上呢,就是通过js脚本,捕获系统的onkeyup事件,判断event.ctrlKey是否为true并且event.keyCode为13,如果满足这个条件,那么就调用按钮对象的click()方法,等同于用鼠标去点击按钮。写个简单的示例代码: <html> <head> <title> 快捷键提交示例代码 </title> <link rel="stylesheet" href='css/style.css' type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta name="author" content="宝玉" /> <script language="JavaScript" type="text/javascript"> <!-- // 快捷键响应 // targetObj: 目标对象,如果满足快捷键条件,触发目标对象的click事件 // ctrlKey: 是否按住了Ctrl组合键 // shiftKey: 是否按住了Shift组合键 // altKey: 是否按住了Alt组合键 // keycode: 按键对应的数值 function Hotkey(event, targetObj, ctrlKey, shiftKey, altKey, keycode) { if ( targetObj && event.ctrlKey == ctrlKey && event.shiftKey == shiftKey && event.altKey == altKey && event.keyCode == keycode ) targetObj.click(); } function fnKeyup(event) { var b = document.getElementById("myButton"); Hotkey(event, b, true, false, false, 13); } // 捕获系统的Keyup事件 // 如果是Mozilla系列浏览器 if (document.addEventListener) document.addEventListener("keyup",fnKeyup,true); else document.attachEvent("onkeyup",fnKeyup); //--> </script> </head> <body> <form method="get" action="no.aspx"> <input type="submit" id="myButton"/> Ctrl + Enter </form> </body> </html> 上面的脚本可以方便的给指定的按钮加上快捷键。如果现在我们希望应用到我们的服务器端控件当中去,例如Button、Linkbutton、Hyperlink等,因为控件的ID各不相同,而且所对应的快捷键也各不相同,那么我们就需要写一个控件来给他们添加快捷键了。 想想这个控件需要哪些属性?TargetControlID:string:既然是给其他控件绑定的,那么所要绑定的目标控件ID是少不了了,根据这个控件ID,我们才能确定一个控件,才能知道它输出时的客户端ID,才能根据客户端ID来在脚本里面确定这个对象。CtrlKey:bool:判断是否用到Ctrl组合键ShiftKey:bool:判断是否用到Shift组合键AltKey:bool:判断是否用到Alt组合键KeyCode:int:和DHTML里面的event.keyCode对应的,例如Enter的keyCode是13。(注:其实这个不是很友好,因为用的时候还要找一下键盘各个按键和keyCode的对应关系,如果结合一个快捷键设置的控件就比较完美了)Text:string:可能顺便需要一点文字说明什么的 相对来说,这是一个比较简单的用户自定义控件应用,创建一个名字为HotKey的类,继承自System.Web.UI.Controls。根据目标控件ID查找控件对象:this.cachedTargetControl = this.NamingContainer.FindControl(this.TargetControlID);根据上面属性,我们就可以生成相应的客户端脚本了,然后在重写控件的OnPreRender事件中使用RegisterClientScriptBlock方法输出脚本。 代码相对比较简单:using System; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.Design; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; namespace CommunityServer.Controls { /// <summary> /// hotkey /// author: dotey /// http://www.communityserver.cn /// </summary> public class Hotkey : Control { private static readonly String scriptKey......[阅读全文]

posted @ | Feedback (33) | Filed Under [ Community Server Web技术 ]

摘要:对于类似于CommunityServer(简称CS)这样如此庞大的系统,很多朋友苦于无法入手,根据我对CS研究的一点经验,感觉从具体实例入手是最简单直接的。因此,我首先以注册新用户这个实例来向大家一步步揭开CS的神秘面纱。 1. 准备工作 本文以CCS(China Community Server,基于CS二次开发)为例,下载地址: http://www.communityserver.cn/builds,在压缩包里面有完整的源码和安装说明。 1.1 安装CCS按照安装说明安装好CCS(如果安装过程中有问题可以到http://www.communityserver.cn上提问),本文以CCS安装在http://localhost/ccs为例。 1.2 打开源码压缩包解压后,在src目录下就是所有的源码,先确认已经将http://localhost/ccs这个虚拟目录指向了src\web目录(如果您使用的是其它虚拟目录,请事先用文本编辑器修改src\Community Server.sln和src\web\CommunityServerWeb.csproj.webinfo其中的http://localhost/ccs为您的虚拟目录地址),不出意外,就可以用VS2003打开src\Community Server.sln了。 1.3. 页面效果通过http://localhost/ccs/User/CreateUser.aspx可以访问注册页面,在注册页面,用户可以输入注册的基本信息,例如登录帐号、昵称、Email、密码等。在点击提交按钮后首先会对提交数据的合法性校验,例如:登录帐户是否为空、Email是否合法、两次输入密码是否一致等。数据合法性校验通过后,要检测是否已经存在相同的登录帐户、昵称和Email,最后就是将注册的数据提交到数据库,并提示用户已经注册成功。 3. 技术分析 3.1 分析页面源码在VS2003中,在CommunityServerWeb项目中,展开User目录,打开CreateUser.aspx文件,切换到HTML视图,代码如下:<%@ Page SmartNavigation="False" Language="C#"  enableViewState = "false" %><%@ Register TagPrefix="CS" Namespace="CommunityServer.Controls" Assembly="CommunityServer.Controls" %><%@ Register TagPrefix="CSD" Namespace="CommunityServer.Discussions.Controls" Assembly="CommunityServer.Discussions" %><%@ Import Namespace="CommunityServer.Galleries.Components" %><%@ Import Namespace="CommunityServer.Blogs.Components" %><%@ Import Namespace="CommunityServer.Components" %> <CS:ContentContainer runat="server" id="MPContainer" ThemeMasterFile = "ForumMaster.ascx" >    <CS:Content id="BodyContentRegion" runat="server">  <CS:CreateUser runat="server" /> </CS:Content></CS:ContentContainer> 3.2 自定义控件没有我们熟悉的文本输入控件等,只有几个自定义控件标记,如果有Asp.Net的自定义控件基础知识,那么应该可以想到,这里用的是自定义控件。顺便温习一下Asp.Net自定义控件,首先,对于CS:ContentContainer标签,根据标签中的CS前缀,我们在页首的申明上找到TagPrefix="CS"的Register:<%@ Register TagPrefix="CS" Namespace="CommunityServer.Controls" Assembly="CommunityServer.Controls" %>根据其中的Namespace属性的值和Assembly属性的值我们可以知道,这里的CS:ContentContainer标签对应的源码就是在CommunityServer.Controls.dll中的CommunityServer.Controls.ContentContainer类。CommunityServer.Controls.dll实际上就是由解决方案中的CommunityServerControls项目生成的。 对于CS:ContentContainer和CS:Content是CS中用的模版控件,其实在Asp.Net2.0中已经内置了这种模版控件。CS在这里是用的一个第三方的模版控件:MetaBuilders.WebControls.MasterPages.dll,限于篇幅,在这里我就不做详细介绍。还是看看我们今天的主角:<CS:CreateUser runat="server" />根据上面的知识,我们可以直接从CommunityServerControls项目中找到CommunityServer.Controls.CreateUser类(一个小技巧就是在VS2003中切换到类视图,可以很方便找到该类对应的.cs文件),位于User目录下的CreateUser.cs文件。 3.3 TemplatedWebControl打开源码(public class CreateUser : SecureTemplatedWebControl),可以知道CreateUser继承自SecureTemplatedWebControl类,那我们先看看SecureTemplatedWebControl类,SecureTemplatedWebControl类很简单,就是检查一下是不是需要使用Https连接,SecureTemplatedWebControl类又是继承自TemplatedWebControl类。其实在CS中,大部分类似于注册页面这样的控件都是继承自TemplatedWebControl,我们先来分析一下TemplatedWebControl的作用。 未完,待续……  ...[阅读全文]

posted @ | Feedback (36) | Filed Under [ Community Server ]

摘要:7.23日要讲内容的PPT 时间大概1小时左右,具体讲的时候一些技术细节会跳过,大家可以实现根据PPT的介绍看看相关源码。 下载: http://www.CommunityServer.cn/builds/docs/...[阅读全文]

posted @ | Feedback (10) | Filed Under [ Community Server ]

摘要:基于CommunityServer本地化开发,除论坛外,还有blog和相册系统,更有丰富的插件功能。 下载: http://www.CommunityServer.cn/builds...[阅读全文]

posted @ | Feedback (20) | Filed Under [ Community Server CnForums ]

摘要:CS1.1发布了源码,相对了1.0,增加了一些小功能,对性能和编码上有所优化,HTML也更简洁。 对中文兼容性还是不太好,SQL主要是中英文日期差异问题造成的,本贴提供下载的版本中已经修正了这些中文环境上的问题,并对所有资源文件进行了本地化。 中文版下载 ,安装说明请参照其英文说明。有问题也欢迎到http://www.communityserver.cn 中一起讨论。 在CS1.0时曾做过部分本地化工作,如中文昵称、精华帖、版主管理、全文索引、多附件、NNTPServer等,因工作繁忙一直未能最终完成,有时间还是会继续对CS进行本地化工作,将CnForums升级到CS_CN。也欢迎更多的人参与进来。...[阅读全文]

posted @ | Feedback (23) | Filed Under [ Community Server ]

摘要:源码下载:http://www.telligentsystems.com/Solutions/license.aspx?File=cs_1.0_src.exe 或<http://www.telligentsystems.com/solutions/RequestDownload.aspx?Key=4afcaf173ac542a7a3>其默认的SqlScript对于中文SQL Server是有问题的,建议您使用CommunityServer1.0 Release 汉化版 中已经调试好的SQLScript,对于中文资源目录,同时建议您使用汉化版中的web目录替换源码版的web目录。 下载解压后,设置虚拟目录CS指向解压后的Web目录,如果您需要建另外的虚拟目录,也可以通过修改Community Server.sln和Web\CommunityServerWeb.csproj.webinfo中的http://localhost/CS/CommunityServerWeb.csproj路径。设置好虚拟目录后,即可直接运行Community Server.sln(需要vs.net2003)。一共有8个项目:  ...[阅读全文]

posted @ | Feedback (61) | Filed Under [ Community Server ]

Full Community Server Archive