TypeKey认证服务

在blog的评论中,在newsgroup的post中,冒名顶替的现象在现在是很难防止的。如何防止comment spam已经成为们讨论的话题。

所以就有公司提供或者将提供一些解决方案。比如TypeKey.它的网址的解释:TypeKey is a free, open system providing a central identity that anyone can use to log in and post comments on blogs and other web sites.

不过现在还没有正式运作,尚不可以做出使用后的评价。很明显,网址必须要经过修改才能使用其服务。

工作流监控及短信子系统

周六接到任务,协助我们公司的几位同事开发一个POC(Proof of Concept)项目,给我们的开发时间是四天,使用BizTalk 04 & .NET来开发。而我们的对手已经开发了一个多月。

任务非常紧张,周六从早上十点钟加班到周日凌晨五点左右,回家睡了一小觉,上午十一点赶到客户处继续开始工作。

我的任务主要是做一些外围工作,不参与具体的工作流编制任务,所以不需要理解具体的业务,主要的工作有以下两部分:

  • 工作流程图形监控:由于BizTalk提供的图形监控具体普遍抽象性,不牵涉具体的业务环境,而且仅提供WinForm方式,还需要安装BTS Server,所以根据客户的需要,需要一个基于Browser的图形监控系统,可以查看到系统中所有的流程,并且可以可以标志当前流程的进程的状态,以及查看某一具体环节的详细信息;
  • 工作流程通知系统:当有新任务分配到具体的工作人员时,通过手机短信或者MSN Messenger方式,将该通知发送给相关的业务人员;

对于第一个任务,由于经常碰到类似的客户需求。所以我决定做一个比较通用的系统,利于以后重用。

所以在开发中,我把绘图的核心类包装了一个单独的Assemly。利用此核心类,我们可以组织出来基本的流程图。左图中的开始结点、中间结点、判断节点以及结束结点均是对象,根据节点的状态从对应的色彩模板中选择颜色进行绘制,做为一个整图输出(由于开发时间比较紧张,我还做不出来特别复杂的流程图,比如两线相交、曲线等,以后慢慢整理)。

图形绘制出来后,通过Response.OutStream将其直接绘制为一个jpg图形,再在另外一个ASPX页面中使用Image控件引用它,使用Map元素为其添加Tooltip以及Href等功能。这个功能到今晨两点左右已经比较完善了。

第二个任务比较简单,我直接调用了新浪的SMS的Web Service,只用了几行代码就加以实现。而使用MSN Messenger则的确难为了我一阵子,最终的方法是使用了DotMSN程序集,并且在里面实现了机器人功能,通过输入相应的命令,可以查看当前处理的订单、监控系统运行状态、启动或者关闭监控系统。在有新任务到达时,主动发送消息通知用户。这个功能今晚十二点左右也比较完善了。而且客户反应,已经远远超过他们的期望。另外,还有一个监控系统,是一个Windows Application,可以以列表方式查看当前正在处理的订单信息。

等本周Demo完系统后,准备抽时间把这套子系统进行细化,在未来的项目中加以复用。上周还一直应另外一个客户要求,做一个SharePoint Portal Server 2003的插件,在文档库中的右键菜单中增加一项右键菜单,如果是Word文档,则查看其“索引及目录”,而如果是PowerPoint,则查看其所有Slide的标题。不过还未做完,可能要等到周末左右才能完成了。

Blog随读

这篇blog[via Julia Lerman],ASP.NET Unleashed一书以及很多开发人员社区资源的作者Stephen Walther 被微软命名为软件传奇人物(Software Legend),恭喜Stephen Walther!以前的软件传奇人物包括Billy Hollis, Jeffrey Richter, David Chappell, Rocky Lhotka, Alex Homer, Dave Sussman, Juval Lowy, and David Platt,但有几个好像不在SoftwareLegends网站上。

微软将收购AOLMary Jo Foley如此说。

[via Aaron Skonnard]有人对InfoPath感兴趣的话,这里是InfoPath Team Blog的地址。

Chris Sells说,Avoid the GAC,尽量用private assemblies来部署你的项目。

Suzanne Cook的 .NET CLR Loader Notes经常会有些非常有意思的tips,最新的一篇教你怎么确定一个文件是否是Assembly

[via Scott Hanselman]真正的Coder是这样的,还读读Denise Reis的答复,这样的女人好像很难找,

在读Robert C. Martin的Modelling the real world以及评论时,忽然想起在Amazon订的Eric Evans的《Domain-Driven Design》一书已经到了,应该停止乱读书了

软件商品化(先在这里留下一个连接,以后再仔细读读有关的东西)

[via Jon Box]HOW TO: Perform Bulk Updates and Inserts Using OpenXML with .NET Providers in Visual C# .NET

A pure object-oriented domain model by a db-guy  [Jimmy Nilsson]

Ingo Rammer的《Advanced .NET Remoting》荣获Readers’ Choice Awards (被认为是软件工业的奥斯卡,Oscars of the Software Industry)中的最佳.NET图书奖。第二名是Jeffrey Richter 的《Applied Microsoft .NET Framework Programming》,第三名是Charles Petzold的《Programming Windows with C#》,第四名是Jesse Liberty的《Programming ASP.NET》。

.NET User Group讲座

听说SQL Reporting Services在最近的微软技术会议上很受欢迎,当然自己对SQL Server 2005 (Codename Yukon)也一直留心着,正好今天的.NET User Group会议的主题跟这二个东西有关,所以就很兴奋地去了。

前个主题是由本地的用户组织负责人主讲,介绍了SQL Reporting Services的安装情况,管理页面,以及在VS.NET里如何设计/发布Report等等,马马虎虎。据说SQL Reporting Services是为了帮助推销SQL Server的,还有很复杂的Licensing问题。现在的Report设计还很粗糙,比不上Crystal Reports,但Report文件是基于XML的,也许是优势。

后个主题是由当地一个微软的Developer Evangelist主讲,花了很长时间才把机器弄好,讲了半天Virtual PC 2004的好处,一个半小时,用PDC版的Whidbey和Yukon,一边每字每句地手写程序,一边解释,用VB写了一个简单的Function,用C#写了二个简单的Stored Procedure。用.NET语言写Stored Procedure/Function真是易如反掌,在Whidbey里发布这些东西也是极其容易。有一点很有道理,如果你的操作是针对set的,最好用T-SQL来写,但如果你需要做procedural操作,那么用编程语言写更合适些。不过因为讲的不生动,手写程序还经常出错,还没讲完,很多人都跑了。

我不好意思先走,所以坚持到了最后。傻人有傻福,最后几分钟Q/A问答,居然答对一个问题,得到一本书,4GuysFromRolla.com的Scott Mitchell 写的《ASP.NET Data Web Controls Kick Start》。

Memory Usage(凑热闹)

开心的问题网上已经有很多人问过了(12)。这不仅仅是托管程序的问题,连Notepad都有类似问题。根据Willy Denoyette [MVP],自NT4 (SP2 )起,程序的主窗口最小化时,操作系统会把有关进程的working set 减少到最低,物理内存消耗减少,但the amount of committed memory 并没有变,操作系统会按需再调入物理内存。

你也可以用SetProcessWorkingSetSize来减少working set,参考

Memory usage

HOWTO: Force GC to reduce reserved memory

注意,频繁调用该方法会影响性能,请细读前面连接里的内容

2门新的MCSD.NET Beta Exams

今天报名参加了MCP Beta Exam 71-330 71-340。时间就在4月份最后一个和5月份第一个星期六。与参加MCDST的态度不同,我准备花些时间准备。

因为在2002年已经得到了MCSD.NET(也是靠参加Beta考试)的证书,通过新的beta考试不会得到什么新的credential。但是可以先睹为快!而且也可以对考试提供一些反馈。

5月份第一个星期六就是5月1日,很多人在旅游么?

用ASP.NET上传大文件

我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果文件很大的话,我们经常会见到Internet Explorer显示 “The page cannot be displayed – Cannot find server or DNS Error”,好像是怎么也catch不了这个错误。为什么?因为这是个client side错误,server side端的Application_Error是处理不到的,可以参考这个帖子研究一下产生这个错误的机理。

handling server error when upload file too large

解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据

  IServiceProvider provider = (IServiceProvider) HttpContext.Current;
  HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
  byte[] bs = wr.GetPreloadedEntityBody();
  ….
  if (!wr.IsEntireEntityBodyIsPreloaded())
  {
        int n = 1024;
        byte[] bs2 = new byte[n];
        while (wr.ReadEntityBody(bs2,n) >0)
       {
             …..
        }
  }

Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度:

ASP.NET Upload Magic Part 2

这里有他讲座的PPT文件:

Uploading with ASP.NET (part 1)

Uploading with ASP.NET (part 2)

第三次博客堂腐败大典

为了迎接郑子颖同学来京工作,兹决定于本周五举办第三次博客堂腐败大典,欢迎各位博客堂好友参加,请大家安排好相应时间,以便到时候来报个到。

由于各位博客堂堂主对于吃喝各有各的口味,现在腐败地点尚无法最终决定,只能在这几天大家再共同商量。

时间:2004-03-19 19:00集合

集合地点:盛世大厦楼下

主题:欢迎郑子颖大帅哥