引用:
原帖由 tifa 于 2007-3-26 19:56 发表
我喜欢用户,一直想找个成熟点的.NET程序
——这位兄弟,WSBLog成熟不成熟我不知道,但是我敢说,如果你本来很熟悉z-blog,而现在想转向.Net,WSBLog是很好的选择。
====================================
版权声明
====================================
WSBLog源代码部分使用GPL许可协议发布(GPL许可仅适用于该BLOG的程序源代码本身,不包括该BLOG附带提供的Z-BLOG的模板和Style文件以及其他从网络上收集而来的公开资源,WSBLog并没有改变这些资源的原有版权)。
====================================
WSBLog的特点
====================================
1、通过适用OO方法对流行的ASP程序Z-Blog进行了完全的重构,结构良好,代码可读性强;
2、同时支持Sql Server和Access数据库。难得的是这种支持并不是通过在代码中硬编码不同数据库的Sql语句实现的,作者专门写了一个小型的ORM(WSORM),在一个小型的BLOG系统中,做到这点实属不易;
3,支持灵活的模板和Style机制。源代码中附送的模板来自于Z-BLOG,仅仅对Z-BLOG的模板进行少量的修改即可适用于WSBLog。同样,将WordPress等模板移植到WSBLog也不困难;
4,超高的性能。为了测试性能专门开通了一个测试网站:
http://www.66ph.com。该网站完全构架与WSBLog之上,文章数量超过110万,分类超过500多个分类(页面使用Ajax动态装载子分类),6000多个Tag,而Tag和文章的对应记录更是多达230多万条。
====================================
源代码与可执行程序下载
====================================
源代码和可执行程序下载(都在一起了,不想自行编译的,可以直接使用):
http://www.wubuku.com/post/178.aspx——目前程序是在VS2003下开发的,如果使用VS2005打开转化,可能会有错误不能编译。
新用户安装,如果选择使用Sql Server,需要使用的数据库建表脚本(在上面的下载包中的DATA目录也有,文件名为database.sql),运行改建表脚本会在数据库中建立一个初始用户名:admin,其密码为:
www.oucsoft.com,用它进管理界面之后,建一个高级用户平时用就好了。使用老版本(老版本的WSBLog只支持Sql Server)的用户请手工修改数据库。操作见下文:
===================================
关于数据库的变更
===================================
以下操作适用于Sql Server,使用Access的用户请参考下文,或者参考此篇在线帮助文章:
http://www.wubuku.com/post/180.aspx
1、增加了一个表TagArticle,用于单独保存Tag和文章的对应关系(按照原来的结构,文章的Tag信息需要使用LIKE查询,如果文章数量很多,比如100万,效率存在问题):
复制内容到剪贴板
代码:
CREATE TABLE [dbo].[blog_TagArticle] (
[tag_log_ID] [int] IDENTITY (1, 1) NOT NULL ,
[tag_ID] [int] NOT NULL ,
[tag_Name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[log_ID] [int] NOT NULL ,
[log_Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO2、修改了分类表Category,目前分类表的结构为:
复制内容到剪贴板
代码:
CREATE TABLE [dbo].[blog_Category] (
[cate_ID] [int] IDENTITY (1, 1) NOT NULL ,
[cate_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_Order] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_Intro] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_Count] [int] NOT NULL ,
[cate_Code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_ParentCode] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_ParentID] [int] NULL
) ON [PRIMARY]对于使用旧版本的用户,需手工修改表结构。该表和上个版本不同的地方如下:
一,将Order字段改为了字符型,这样在编译分类的时候更容易排序:
复制内容到剪贴板
代码:
ALTER table blog_Category
ALTER COLUMN
[cate_Order] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL二,给分类加上“父分类”的相关字段:
复制内容到剪贴板
代码:
alter table blog_Category
add
[cate_Code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_ParentCode] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cate_ParentID] [int] NULL——也就是说,目前的分类是支持树形结构父子分类方式了。以下脚本如果在Sql Server查询分析器中运行出错,请手工修改表结构即可。老版本的用户在手工更新了数据库之后(自动升级功能并不更改数据库表结构),需要运行一下“自动升级”功能,该功能会在Tag和文章的对应关系表(blog_TagArticle)生成新的记录。
===================================
使用了URL重写机制
===================================
不在需要手工重建文章(重建索引仍然保留,出于性能考虑)。实际上,新版本仍然支持生成全静态的Html文件(可以在配置文件中修改),但是生成纯静态网页主要是为了保证从google、baidu搜索结果链接过来的静态网页仍然可用,建议使用URL重写。URL重写使用了微软MSDN上这篇文章《在ASP.Net中执行URL重写》中提供的方法(已经编译好文章中提供的源代码,打包进上面下载文件的bin目录中):
http://www.microsoft.com/china/m ... iting.mspx?mfr=true
——感兴趣的可以看看这篇文章,可下载源代码自行研究。
====================================
关于程序安装
====================================
有点ASP.Net基础的话很容易做:
1、如果已经了安装了WSBLog的老版本,需要覆盖前请备份好Include目录,不要把友情链接等文件覆盖了。同时请备份Template目录,如果您自行修改了模板文件并想继续使用的话,同时请备份Style目录,也是以免被新的同名文件覆盖。
2、配置文件Web.config和老版本有所不同。相对于老版本的Web.config,主要是进行了精简,程序的很多配置放到了单独的xml文件中(其实这是为日后多用户Blog做的准备)。下载的包中包括了两个示例配置文件,分别是Web.config.sample(如果不需要使用URL重写,可以使用这个)和Web.config.urlrewrite.sample(如果使用URL重写,请选择这个)。请选择合适的文件复制后重新命名为Web.config后修改。
一般自行修改配置文件中的下面几句:
复制内容到剪贴板
代码:
<appSettings>
<add key="dataConn" value="User ID=用户名;Password=密码;Initial Catalog=数据库名称;Data Source=(local);" />
<add key="blogRootUrl" value="http://www.wubuku.com/" />
<add key="blogGuid" value="60E32840-F51D-4520-A8DE-4FEF627D5022" />
<add key="dbType" value="SqlServer" />
</appSettings>第一行是数据库连接字符串设置。需要您把用户名、密码、数据库名称填写好,一般来说Data Source=(local)不需要修改,“(local)”的意思是数据库安装在本机上,如果数据库不在本机上,改一下就可以了,比如改为“Data Source=192.168.0.1”;
第二行是您的BLOG的URL地址,不要忽略了“/”;
第三行如果其实目前没有什么用处(也是为了以后多用户Blog准备的),可以随便改一个值。
对于Access的用户,请注意修改dbType的值为“ACCESS”。
3、Blog的安装目录需要是一个“应用程序”目录,如果你放在IIS的网站根目录下,一般已经是应用程序目录了,如果不是放在根目录下,(根据操作系统版本的不同)可能需要手工用IIS管理器设置一下,把Blog的安装目录创建成应用程序目录;
4,ASP.Net必须对Blog目录有读写的权限。简单地说,如果你的机器是XP,运行ASP.Net的用户应该是“ASPNET”,如果是Windows Server 2003,那么把目录的读写权限给“IIS_WPG”就可以。
===================================
对Access的支持,或从Z-Blog迁移到WSBLog
===================================
WSBLog已经支持Access数据库,数据库格式和Z-Blog几乎完全兼容,只有少量的修改。想从Z-Blog切换过来的用户,再也不需要去找支持Sql Server的空间了。为了尊重Z-BLOG的版权,暂不提供Access数据库,需要的请到Z-BLOG下载源代码包,并提取出其中的Access数据库文件。然后,可以按照下面的方法操作:
首先请去重新下载新版本的WSBLog,前几天发布的版本并不支持Access数据库。
http://www.wubuku.com/post/178.aspx
1、打开z-blog的数据库文件,修改blog_Category的结构,把cate_Order字段改为文本类型,并且,新增加几个字段:
cate_Code —— 类型为:文本
cate_ParentID —— 数字
cate_ParentCode —— 文本
修改后的blog_Category表如下所示:
2、增加一个表blog_TagArticle,这个表用来保存Tag和文章的对应关系:
tag_log_ID —— 自动编号
tag_ID —— 数字
tag_Name —— 文本
log_ID —— 数字
log_Title —— 文本
新增的表结构如图:
——数据库的修改完毕,将修改后的数据库上传至服务器WSBLog安装目录的的DATA子目录下。
3、修改Web.config文件,找到appSettings段,改成下面这个样子:
复制内容到剪贴板
代码:
<appSettings>
<add key="dbType" value="Access" />
<add key="dataConn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\WSBLog\DATA\yangblog.mdb" />
<add key="blogRootUrl" value="http://localhost/WSBLog/" />
<add key="blogGuid" value="60E32840-F51D-4520-A8DE-4FEF627D5022" />
</appSettings>——其中的“E:\WSBLog\DATA\yangblog.mdb”是你的Access数据在服务器上所在的物理路径。
如何知道Access数据库在服务器上的具体物理位置?这需要通过IE浏览请求一下WSBLog目录下的DATA/test.asp文件。比如,你的BLOG的URL是
http://www.wubuku.com,那么,在IE的地址栏中输入
http://www.wubuku.com/DATA/test.asp,就会显示出该test.asp文件在服务上所在的目录,比如显示为“E:\WSBLog\DATA\test.asp”,将test.asp替代为你的Access数据库名称即可。接下来的设置和Sql Server就没有什么区别了,请参考在线更新文章:
http://www.wubuku.com/post/179.aspx
需要说明的是,目前WSBLog对Access的支持完全是通过ORM实现的。同时Sql Server和Access,只通过配置文件就可以切换。代码几乎没有做任何修改(之所以说“几乎”,是因为仅仅修改了两行读数据库类型配置的代码)。WSORM仅仅通过增加了一个AccessSession类就解决了对Access的支持问题。WSBLog对Access的支持几乎没有任何问题。唯一的不足是:在“索引重建”的时候,比使用Sql Server比要慢很多。这是因为Access是一个文件型数据库,频繁地打开和关闭数据库效率非常低(Sql Server有内置的连接池机制)。目前的WSBLog,在索引重建的时候,会多次调用底层的业务类,而数据库的打开和关闭,目前是由业务类(通过ISession接口)调用的AccessSession自行控制的。这个地方的效率问题,需要以后优化。
[
本帖最后由 wubuku 于 2007-3-29 11:27 编辑 ]