Leon.Zhou-技术变革的年代!

活到老,学到老!

2007年3月15日 #

SQLServer 2005 Agent无法启动的问题

安装后,服务的登录身份默认是Local System(本地系统帐户)。

如果修改成自己的一个Windows帐户后,Agent就启动不起来了,在事件里面出现错误:

SQLServerAgent could not be started (reason: SQLServerAgent must be able to connect to SQLServer as SysAdmin, but '(Unknown)' is not a member of the SysAdmin role).

该帐户已经配置了SysAdmin的权限,经过google,找到了解决方案,MSDN中也有详细的描述

posted @ 2007-03-15 14:51 Leon.Zhou 阅读(1221) | 评论 (0)编辑

2007年1月30日 #

Ajax的并发调用

首先我要先小小的鄙视一下自己。写了这么久js,也做了不少Ajax相关的工作了,今天才知道XmlHttpRequest对象是支持并发的!

这个错误最早是在2003年刚接触XmlHttpRequest时,听一个同事说的,因为那个弟兄是js方面的专家(确实是专家,写过很受欢迎的技术书籍,目前在一个很大的公司做架构师。但人都是有盲点的嘛!),后来我也就没有再想过。唉,今天写看一段程序时突然发现了这个问题。

经过测试,在prototype.js和ASP.NET 2.0 Ajax1.0中默认都是支持的(其他的我没有测试),在ASP.NET 2.0 自带的Callback中也是支持的,但我以前写的一篇文章:ASP.NET 2.0 正式版中无刷新页面的开发中,举的例子是不支持的。把那篇文章中第二步里面提到的:

<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;

添加一个参数“true”,替换成:

<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context", true)%>;

就可以了。

虽然XmlHttpRequest是支持并发的,但并发的个数却是有限的,超过并发的提交操作会排队等待前面的结束后再提交。因为没有时间测试,具体的个数还不知道,在不同浏览器上的表现也不太清楚,那个弟兄知道了一定要告诉我呀,谢谢!

posted @ 2007-01-30 16:26 Leon.Zhou 阅读(702) | 评论 (2)编辑

2007年1月14日 #

TFS(Team Foundation Server)使用经验

使用TFS有一段时间了,有很多功能,例如源代码管理相关的,很以前的使用VSS和ClearCase等都不太一样。经过摸索,积累的一些经验,和大家分享一下吧!

1、TFS不仅仅提供了源代码管理的功能,还提供了任务管理、分析服务等许多功能,但这些功能必须全部安装,不能够定制安装,例如只安装其中的源代码管理工具:(

2、安装时必须安装SQLServer2005,而且数据库必须是默认实例名

3、源代码管理默认模式是支持多人签出,但可以在项目的源代码管理中关闭它。

4、签出源代码时,不会自动获取这个文件的最新版本。这个是by Design的,没有地方可以配置。不过,如果这个文件确实有更新的版本,你可以在输出窗口中看到相关的提示信息。

5、不要修改安装TFS的服务器系统时间!因为TFS的Source Control会根据签入时间做判断,如果后续签入的时间小于变更集的最新版本的时间,就会报错误“TF54000”,并拒绝签入。如果已经出现这个问题了,可以通过修改数据库TfsVersionControl中的“tbl_Changeset”表来解决,具体的处理方法看这里 。

6、无法在IDE环境中删除TFS中创建的团队项目(不是VS创建的项目),只能用命令行工具删除。其实很多功能都可以或只能用TFS提供的命令行工具完成。

7、搁置集是一个非常不错的功能,建议大家都使用,具体用法看MSDN中的相关内容吧。

8、Team Build中配置节的修改方法参见这里,需要注意的一点是,我发现MSBuild的Copy Task对共享文件夹方式(例如:\\server1\folder1\)的处理有问题,没有办法从共享文件夹复制数据到指定的路径,因此建议大家用Exec Task执行xcopy命令代替Copy Task。

9、使用Team Build在编译既有Web Site,又有类库的解决方案时,需要选择合适的编译平台才可以,具体可以参见我以前的一篇文章

10、同上面的问题5一样,修改时间还会导致生成报表的数据仓库出问题。如果你把时间调到未来,例如明年的某天,等你发现错误,再改回来,就会发现报表中的“上次仓库更新时间”是明年。也就是说,数据仓库不会更新了。修正这个问题,也需要去修改TFS的数据库:打开TFSWarehouse数据库中的_WarehouseConfig表,将里面错误的时间都修改成今天或以前的时间就可以了。

 

另外,MSDN中文介绍TFS的地址是这里, 应该是目前关于TFS最全、最完整的中文资料了,当然,如果需要查找更多、更详细的TFS资料,还是多关注一下英文MSDNTFS的官方论坛了。还有,我这里也会不定期的将TFS的经验贴出来与大家分享。

--------

2007-1-15更新:添加经验10。这里还要说明一点:TFS我是绝对推荐使用的,而且TFS也是很好用的。不过任何一个新的、复杂的系统都会有一些问题,有些是使用习惯,有些是bug,这些都是难免的。克服困难,把它用好,为我们服务才是我们的目的。

posted @ 2007-01-14 21:01 Leon.Zhou 阅读(7590) | 评论 (20)编辑

2007年1月7日 #

VS2005 SP1安装太痛苦了!

VS2005 SP1出来有一段时间了,我也是刚刚才升级上来的。为什么?因为很多blogger都说安装这个sp1不但会出现安装不了的情况,而且安装时间需要很长、很长~~

经过我的经验,这些blogger说的都是完全正确的!尽管Scott Guthrie中文)中的多篇文章介绍了SP1如何如何,但有一点不可否认:这次的安装程序做的太失败了,简直是场灾难!

我安装了将近3个小时,重启了一次电脑,在这期间,电脑cpu占用100%,我无事可作,但又不能离开电脑,因为它需要我按几次“是否需要确认安装”的按钮。而且,这些按钮还出现在安装的过程中,还是分开出现的,上帝呀!难道Scott和那些Tester竟然都能够忍受吗?

posted @ 2007-01-07 23:50 Leon.Zhou 阅读(449) | 评论 (1)编辑

2007年1月5日 #

Team Build 不支持构建WebSite?!

最近在项目中使用TFS做为新的项目和源码管理工具。我们的项目在一个解决方案中包含多个website和class和library,在使用Team Build时竟然发现生成的只有dll,网站竟然没有?!

这个问题把我们的配置人员困惑了好久,不过经过搜索,终于在链接1链接2中找到了答案。

解决的方法很简单,在创建Team Build时,选择编译平台为:Mixed Platforms

道理也很简单:website的编译平台为“.Net”,class lib的编译平台为“any cpu”,只有选择“mixed platforms”才可以都编译。为什么默认不选择这个呢!!!

在搜索的过程中,还发现了一个好玩的东西:Visual Studio 2005 Web Deployment Projects,大家有兴趣了看看吧。它在team build 中的使用,看见参考这个

posted @ 2007-01-05 22:26 Leon.Zhou 阅读(1785) | 评论 (6)编辑

2006年3月31日 #

ASP.NET 2.0 正式版中无刷新页面的开发

示例代码下载4K
   在已经发布的
ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动。而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人了解,甚至不少人认为该功能有些“鸡肋”。但如果我们仅仅是在程序中加入很少部分的 Ajax 特性, Atlas Ajax.Net 等就显得有些“杀鸡用牛刀”的感觉了。而且,我认为使用 ASP.NET2.0 提供的方法进行开发并不很复杂,相反,使用很少的代码就可以做出来很棒的效果!

   下面我来一步一步的带大家开发无刷新的页面!

 第一步:实现 ICallbackEventHandler 接口

   ICallbackEventHandler接口位于System.Web.UI命名空间下。在beta2时,ICallbackEventHandler只包含一个RaiseCallbackEvent方法,即处理回调事件,又返回处理结果。在正式版中,它变成了包含GetCallbackResultRaiseCallbackEvent两个成员方法,第一个用来返回回调事件的结果,第二个用来出来回调事件。这个变化主要是为了编写Web控件而做的改动,具体可以看一下GridView等控件中的实现代码。

建立一个 Web 网站,我们来修改 default.aspx.cs 文件:

 1        public  partial  class  _Default : System.Web.UI.Page, ICallbackEventHandler

 1     private string str;
 2     public void RaiseCallbackEvent(string eventArgument)
 3     {
 4         //可以根据传递的参数不同,调用不同的处理逻辑
 5         str = "从服务器端返回的内容:" + eventArgument;
 6     }
 7 
 8     public string GetCallbackResult()
 9     {
10         return str;
11     }
12 

  第二步:注册回调方法

   我们在 default.aspx 页面中添加一个 TextBox ,一个 Label 和一个 Html 控件 Button ,并给 Button 添加 onclick 事件:
1 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
2 <input id="Button1" type="button" value="提交到Label1" onclick="CallServer(TextBox1, Label1)"/><br/>
3 <asp:Label ID="Label1" runat="server" Text="Label1:"></asp:Label>
4 

 1     <script type="text/javascript"> 
 2        //由button调用
 3        function CallServer(inputcontrol, context)
 4        { 
 5             context.innerHTML = "Loading";
 6             arg = inputcontrol.value;
 7             //注册回调方法
 8             <%= ClientScript.GetCallbackEventReference(this"arg""ReceiveServerData""context")%>
 9         }
10         //在回调方法中注册的接收返回结果的函数
11         function ReceiveServerData(result, context) 
12         {
13             context.innerHTML = result;
14         }
15     </script>
16 

   好了,一个无刷新的页面就开发完了,它可以将你在 TextBox 中输入的文字,通过服务器代码写回到页面的 Label 中。是不是很简单?你可以运行一下你的程序看看效果啦!

   下面我们来分析一下这些代码。

   首先,我们看
<%= ClientScript.GetCallbackEventReference(this, "arg""ReceiveServerData""context")%>;

   ClientScriptSystem.Web.UI.Page对象的一个属性,它是System.Web.UI.ClientScriptManager对象。用于管理客户端脚本,GetCallbackEventReference方法用于注册一个服务器端事件的客户端回调。它的第四个参数“Context”非常重要,但在MSDN中并没有相关的例子和详细的说明。在我上面给的代码中可以看到,调用CallServer方法时,传递的Context参数就是Label1ReceiveServerData的第二个参数“Context”就是被传递过来的Label1。在我的例子中,Context被我用于设定一个用来显示服务端返回结果的控件。其实,你可以将任意的对象赋值给Context,它都会被传递给本地端处理回调返回结果的函数,这样,你就可以根据调用前指定的“上下文”灵活的操作返回结果了!在我给出的完整例子中,你可以看到一个使用Context做的无刷新显示GridView的例子。

   在这里我要说个题外话,Context这么重要的参数在MSDN中不但没有详细的说明,而且VS2005中文正式版MSDN中关于回调的例子竟然还是beta2时的实现!这个版本的MSDN可以说是我用过的版本中品质最差的。不过现在的MSND可以用“相当”庞大来形容,出错也是在所难免的,希望下个版本的MSND会好一些。

   OK,在ASP.NET 2.0中开发具有Ajax特性的东东不难吧!其实就是两步:

1、              Server端实现ICallbackEventHandler接口,在接口包含的方法中根据传递的参数分别调用不同的处理方法,然后返回结果;

2、              Client端注册回调函数(当然你也可以在Server端注册),然后实现处理回调结果的函数。其中,如果对Context能干灵活运行,你就可以做出非常好的效果了。

   在我给出的完整例子中,你们可以看到更完整的处理逻辑和更漂亮的特效,当然,增加的代码还是很少的!

 

   有将近一年没有写Blog了,手也比较生了。以前cnblogs的文章我是基本上天天都看的,现在一两个星期看一次就不错了,还是走马观花的浏览几篇而已。如今每天都是为了生活而奔波,人在江湖,身不由己呀!

   发了半天牢骚,我也预告一下,我会在最近写一些介绍Atlas的文章。其实Atlas也有很多人都写过了,不过大都是根据官方文档的模式写的,而最近发布的几版CTP变化挺大的(实现的功能也比较诱人!),对新特性介绍的文章比较少,所以我就来献丑了,希望对大家使用Atlas有所帮助。

posted @ 2006-03-31 10:47 Leon.Zhou 阅读(15903) | 评论 (36)编辑

2005年5月27日 #

代码覆盖率分析工具--NCover

我们在进行单元测试的时候,总是希望知道到底有多少代码被检测到了,还有那些代码是没有测试到的, NCover 就可以帮我们做这个工作!
下面是我整理的NCover相关资源:
NCover官方网站:http://ncover.org/
NCover最新下载:NCoverSetup-1.3.3.zip(官方)    NCoverSetup-1.3.3.zip(本地)
NCover生成报表的一个第三方XSL转换文件,推荐!直接解压缩后覆盖到NCover的安装目录:Coverage.zip
NCover生成报表的一个第三方的查看工具,可以直接看到原始的代码情况,推荐!NCoverBrowser.zip
NCover同nant配合时的一些问题和解答:http://www.ncover.org/COMMUNITY/ShowPost.aspx?PostID=158

posted @ 2005-05-27 11:30 Leon.Zhou 阅读(3043) | 评论 (5)编辑

2005年5月24日 #

[原创] nunit2report V1.2.2 release 汉化修正版 V1.0

nunit2report 可以将nunit生成的xml文件转化成界面友好的html格式的报表。

我在使用nunit2report V1.2.2 release的时候,发现它不能够工作在nant V0.85 rc3下面,并且有些地方存在逻辑错误。于是,我就制作了这个汉化修正版。具体的修正内容请看下面的历史记录。

原有的nunit2report存在有很多bug,例如:不支持将多个xml文件输出成一个html报表;不支持将多个assembly生成的单个xml文件生成html报表等。因为nunit2report的结构和代码写的不算好(甚至是很差*_*),导致修改这些bug相当的困难,所以我并没有去修补这些bug,希望大家原谅。同时因为我的时间有限,所以也暂时没有开发一个全新的nunit2report的计划,相信以后会有时间的:)。
如果大家在使用时发现我的修改产生了一些bug,请同我联系:
email:pfzhou@yahoo.com.cn
blog: http://www.cnblogs.com/pfzhou
如果您不会使用nunit2report,请查阅本修正版带的示例和nunit2report自带的帮助文件、示例,或者您可以在Google上面查阅相关信息,本人概不回复这方面的问题。


授权:
────
本修改遵循nunit2report的原始授权,如果您要基于本修改版进行修改,请保留当前的版本信息。

历史:
────
2005-05-23 V1.0:
- 汉化资源,并将资源格式改为utf-8
- 修正了不支持nant V0.85的bug
- 修正了一些界面显示错误和计算上的逻辑错误

图片预览:
t_n2r1.jpg      t_n2r2.jpg      t_n2r3.jpg

下载

posted @ 2005-05-24 11:09 Leon.Zhou 阅读(1132) | 评论 (1)编辑

2005年3月13日 #

WSS安装时候的一个问题

使用SPS和WSS已经很久了,也安装了不少次,都没有发现什么问题,但昨天在一个笔记本上面安装WSS的时候,却怎么也运行不起来!
因为要给客户做演示,所以情况比较紧急,但越是着急,越是搞不定真是老革命与到了新问题呀,呵呵。
不过经过google和msdn的帮助,现在这个问题已经顺利解决了,下面就说一下这个问题吧。

问题表现:打开wss管理中心的时候,在弹出的用户名和密码输入框中无论输入什么都没有办法登陆成功
解决方法:将IIS_WPG添加到“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files”的权限上面,设置为完全控制的权限。
问题原因:参见解决了安装WSS后不能配置的问题.

posted @ 2005-03-13 14:07 Leon.Zhou 阅读(1513) | 评论 (1)编辑

2005年2月1日 #

《OOP实践》的培训文档

前一段时间公司做了一个《OOP实践》的培训,对象是一些刚刚毕业不久的学生和一些没有太多OO开发经验的开发人员。
我负责了其中的一部分,主要包括:
- 多态的概念
- 多态的例子
- 设计模式介绍
- 设计模式的例子
- 重构的概念

PPT和代码(C#),还有一本《设计模式迷你手册》都在附件中。

OOP实践.rar

posted @ 2005-02-01 10:46 Leon.Zhou 阅读(1389) | 评论 (7)编辑