.Text简单客户端:架构草案

Posted: 十二月 3rd, 2003 | Author: | Filed under: 胡编 | No Comments »

设置部分:设置WebService URL、UserName、Password。Password应该做加密。暂时不支持Proxy。目前本地Username/Password和远端一样,但在后台应预留未来扩展空间。现在只支持单个blog。

本地登录成功后,自动登录远端WebService,获取相应的Blog信息、Category信息。具体流程:

Login Locally->Login WebService->Get Blog Infomation DataSet->Get Category List DataSet->Display post interface

显示发贴界面。

发贴,成功后给一个信息,清理发贴界面。

明天下午不上班,应该可以做出一个雏形来了。


.Text简单客户端进度

Posted: 十二月 3rd, 2003 | Author: | Filed under: 坐思, 胡编, 起行 | 3 Comments »

基本完成WebService部分。明天做客户端部分。比较烦人的是如果用.NET做,则客户端机器必须安装有.NET Framework SDK。不过想到这东西也就是自己用,就无所谓了。嘿嘿。

今天来学院的专家是北大外语学院院长刘曙雄教授。虽然出了一点小问题(笔记本电脑插了个没开的电源),后来还是比较顺利地进行了整个过程。

也许月半说得对,我追求的尽善尽美,真的别人不会在意。但是,如果只有别人在意的事才去做的话,人活得会不会太累呢?


.Text简单客户端设想

Posted: 十二月 3rd, 2003 | Author: | Filed under: 胡编 | No Comments »

.Text支持用metaBlogAPI或者WebService做客户端。不过前者只有英文版软件可用(如wBloggar),而且似乎不大灵光,后者则太过简单,连Category都不支持。所以打算自己做一个简单的、第一版只支持新增Post的客户端。大体结构如下——

                            DATABASE
                               |
              .TEXT STORED PROCEDURE
    (我的意思是.Text提供的SQL Server过程)
                               |
                            WebService
                               |
                              Client

在看.Text原来的Stored Procedure时,想起来作者没有提供详细的文档,只能自己研究了。通过查阅源码和数据库结构,大体了解了两个关键存储过程和表中参数的用法。下面简单列一下,备考。

首先,每个Post的CategoryId是放在blog_links表中。这个让我比较迷惑。作者把Post的category当作和“链接”一样的东西,混杂不清。

所以,在添加Post的时候,要执行两个过程:blog_InsertEntry和blog_InsertLink,第二个过程需要第一个过程返回的PostId值。来看看着两个过程的参数意思——

Create Proc blog_InsertEntry
(
@Active bit, //是否publish出来
@Title nvarchar(255), //标题
@TitleUrl nvarchar(255), //标题URL。这个我不大明白,从来没用过。
@Text ntext, //内容
@SourceUrl nvarchar(200), //来源URL
@PostType int, //BlogPost-1, Story-2, Comment-3, PingTrack-4,Undeclared-5,这里用1就好
@Author nvarchar(50), //作者
@Email nvarchar(50), //邮件地址
@SourceName nvarchar(200), //来源
@Description nvarchar(500), //描述,基本没什么用
@BlogID int, //不用解释了吧
@DateAdded datetime, //日期,用当前日期可也
@IsXHTML bit, //1-支持HTML, 0-不支持,对于Post应该支持,Comment则不支持
@ParentID int, //Post为-1, Comment是PostId
@ID int output) //返回ID
……

Create Proc blog_InsertLink
(
@Title nvarchar(150), //标题,对于Post,用Null
@Url nvarchar(255), //URL,对于Post,用Null
@Rss nvarchar(255), //RSS,对于Post,用Null
@Active bit, //活动,1
@NewWindow bit, //新窗口,0
@CategoryID int, //这个关键,不过无需解释了
@PostID int, //同上
@BlogID int, //同上
@LinkID int output //返回ID
)……

这样一来就清楚啦。稍候把发文流程思路整理一下再放上来。


资源库系统

Posted: 十一月 23rd, 2003 | Author: | Filed under: 胡编 | 1 Comment »

前两天开始写东方研究资源库的东西,感觉不错。特别是用Microsoft Application Block来做数据库访问,方便极了。我自己写了一个连接字符串访问方法,这下更方便啦。

打算这个星期之内完成。预计要注意的地方:

1、资源文件的上传下载管理。现在的想法是把二进制内容放在数据库,不过大尺寸的文件怎么办呢?是否应该放在硬盘目录中?再考虑。

2、缩略图。是否应该生成缩略图?对于图片当然这样会比较好,但是就复杂一些了。


听力教学项目重构

Posted: 十一月 19th, 2003 | Author: | Filed under: 胡编 | No Comments »

从昨天开始用ASP.NET重构之前用Delphi做的听力远程教学系统,目前为止进度一般。今天完成了基于页面的权限控制和用户登录部分。根据项目需求,没有做成完整的权限控制,仅简单在页面上放置一个自定义的权限检查控件,根据用户角色决定是否让访问。如果权限不对就回到访问来源页。部分代码——

 public class PageAccessControl : System.Web.UI.UserControl
 {
  private void Page_Load(object sender, System.EventArgs e)
  {   
   String clientRole=Session.Contents["UserType"].ToString();
   if (!IsInAccessRoles(clientRole)){
    
    Response.Redirect(Request.UrlReferrer.ToString(),true);
   }
  }
  
  private String accessRoles;
  public String AccessRoles{
   get{ return accessRoles; }
   set{ accessRoles=value; }
  }
  private bool IsInAccessRoles(String Role){
   foreach(String accessRole in AccessRoles.Split(new char[] {','})){
    if (Role==accessRole){ return true; }
   }
   return false;   
  }

Google from VS.NET?

Posted: 十一月 11th, 2003 | Author: | Filed under: 胡编 | No Comments »

看看这里,满有意思的一篇文章:http://msdn.microsoft.com/msdnmag/issues/03/11/Bugslayer/default.aspx


.TEXT居然不能在随笔编辑界面贴图!

Posted: 十一月 9th, 2003 | Author: | Filed under: 胡编 | No Comments »

本来它用FTB控件,是支持上传贴图的,可是因为.TEXT接管了所有请求,把对上传图片aspx的请求转给default.aspx了。害得我搞了半天都不行,原来……真是有够恶心啊。改天得修理修理,没有贴图太烦人啦。


这个看起来不错

Posted: 十一月 6th, 2003 | Author: | Filed under: 胡编 | No Comments »

About FxCop

FxCop is a code analysis tool that checks .NET managed code assemblies for conformance to the Microsoft .NET Framework Design Guidelines. It uses reflection, MSIL parsing, and callgraph analysis to inspect assemblies for more than 200 defects in the following areas: naming conventions, library design, localization, security, and performance (see Rule Topics). FxCop includes both GUI and command line versions of the tool, as well as an SDK to create your own rules.

Download FxCop 1.23

FxCop must be running under the same version of the .NET Framework as that used to compile the assemblies it analyzes.
Please select the correct version of FxCop.


兵器谱之Application Block

Posted: 十一月 6th, 2003 | Author: | Filed under: 胡编 | 2 Comments »

其实有很多工具被我们忽略了。例如这个早已出现的Application Block,
是微软出的一个.NET Helper工具包,包括一个数据库工具和一个异常处理工具。

#数据库工具:执行SQL命令、存储过程并返回DataReader或DataSet或不返回;
#异常处理工具:处理、跟踪、记录异常


About IBS Portal

Posted: 十一月 6th, 2003 | Author: | Filed under: 胡编 | 3 Comments »

IBS Portal真是经典的范例,实在值得好好研究。看看这两个Method:

        //*********************************************************************
        //
        // PortalSecurity.IsInRole() Method
        //
        // The IsInRole method enables developers to easily check the role
        // status of the current browser client.
        //
        //*********************************************************************
        public static bool IsInRole(String role) {
            return HttpContext.Current.User.IsInRole(role);
        }
        //*********************************************************************
        //
        // PortalSecurity.IsInRoles() Method
        //
        // The IsInRoles method enables developers to easily check the role
        // status of the current browser client against an array of roles
        //
        //*********************************************************************
        public static bool IsInRoles(String roles) {
            HttpContext context = HttpContext.Current;
            foreach (String role in roles.Split( new char[] {';'} )) {
            
                if (role != "" && role != null && ((role == "All Users") || (context.User.IsInRole(role)))) {
                    return true;
                }
            }
            return false;
        }