博客堂 Enjoy coding, enjoy life!

转到页面(1/700):
后页末页

在asp.net下面使用Ironsoft的FlashCapture

IronSoft的FlashCapture可以说是当前已知的一个唯一的可以实现flash抓图的组件,可惜它是在asp才能使用。现在跟着我来看看,如何在asp.net下面去调用它。

首先,在asp.net下添加FlashCapture的引用:

选中网站的项目,然后右键,选择“添加引用”,在弹出来的框里面选择”COM”这个选项卡,往下拉,找到”Ironsoft Library”,然后点击确定,这时候可以看到在bin目录下面添加了:Interop.IronSoft.dll.

其实就是添加代码:

FlashCaptureClass fc = new FlashCaptureClass();
fc.FileName = Server.MapPath("test.swf");
fc.CaptureFrame = 1;
fc.Save(Server.MapPath("test.jpg"));

这时候你会发现图片是抓出来了,可是是一片白的。这是因为asp和asp.net的线程模型不一样了,所以出现了这样的问题,这时候我们要设置asp.net的这个页面的Asp兼容模式:AspCompat 为"true"。也就是写在asp页面的顶上,如:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FlashCapture.aspx.cs" Inherits="FlashCapture" AspCompat="true" %>

这下子抓出来的图片里面就有内容了(IronSoft的其它组件调用如果有类似的问题,也都可以这样处理)。

最后,如果你用VS自带的服务器功能来调试的时候,会发现系统的状态栏上多了一个图标。这说明这时候FlashCapture组件并没有被释放掉。可以用以下代码来实现释放:

System.Runtime.InteropServices.Marshal.ReleaseComObject(fc);
GC.Collect();

这样就轻松实现了在asp.net下面实现Flash的抓图功能了。

posted on 2009-01-16 05:47:15 by chinahuman  评论(0) 阅读(341)

随机的决心制作器

【原文地址】Resolution Randomizer

【原文发表日期】26 December 08 05:03

我发现自己总是很难去做有意义的新年决心。幸运的是,我接触到一个非常有趣的Silverlight应用,它将帮你做出一个真正有意义的决心。如果你不喜欢你得到的决心,你可以点击“Randomize”,然后试另一个。

你可以在一下网址尝试,http://resolutionrandomizer.pop.us/ecard.aspx,我很乐意知道您得到的决心。

posted on 2009-01-07 22:31:22 by hawking106123  评论(1) 阅读(380)

Joycode.MVC Blog Engine Announcement

博客堂从去年最后一天开始升级到Joycode.MVC Blog Engine上面来,现在基本上每两天会进行一个小型版本升级,目前已经完成了大约50%的前端功能,后端功能(管理端)仅完成10%。

本次升级的版本使用了ASP.NET MVC框架,并且准备在ASP.NET MVC正式发布会,将该博客引擎的所有源代码都进行开源。在这次改版当中,学习了OxiteSubtext以及BlogEngine等开源的博客项目,借鉴了其中很多非常棒的设计亮点:比如在实体类设计、事件模型以及泛型使用上学习了BlogEngine,Controller以及Views方式学习了Oxite,而数据库架构借鉴了Subtext。感觉这段时间内获盈颇多。

当然,由于这次改版时间比较匆忙,肯定还是有很多Bug出现(昨天进行版本升级时,在后台管理系统部分就忘了增加关键代码,出现了一个所有用户均可以自由删贴的Bug,幸亏今早自己发现了)。如果您发现了Bug,并且在Codeplex上有帐号,可以直接去Codeplex提交Bug,当然,也可以在本随笔后方直接添加留言。如果有任何功能需求,也可以在本贴后提交。

非常感谢大家对于博客堂的支持。

(另,征集两个博客的管理员以及志愿翻译人员: http://blog.joycode.com/haacked  以及 http://blog.joycode.com/brada,如果您有意协助翻译这两个博客,请在留言中表明,并且进行一下简单的自我介绍,在博客堂升级结束后,我们会将随贴广告位以及侧边栏广告位移交给管理人员以及志愿翻译人员,以作收益)。

(另,所有注册用户的帐号都已经自动激活,本站注册用户功能也已经开放)

posted on 2009-01-06 14:16:42 by 开心就好  评论(21) 阅读(1373)

恭祝大家新年快乐

终于在2008年最后一天,将博客堂进行了更新。这次更新主要是使用了ASP.NET MVC重新进行了架构,由于目前ASP.NET MVC本身还处于Beta 阶段,而RC应该在下个月初发布,届时本堂还会进行相应更新。

请所有博客堂堂主重新使用Windows Live Writer更新帐号设置。在更新帐号结束后,就可以使用Windows Live Writer直接编写文章了(新建、更新以及删除),目前页面端的后台管理界面还在开发当中,应该在本周末可以发布。

非常抱歉这一年来让各位堂主受累了,由于工作繁忙,前期的改版半途而途,这次开心不会了。最后祝各位新年快乐. :)

posted on 2008-12-31 19:01:50 by 开心就好  评论(8) 阅读(1789)

新消息:开发者开始趋向于在VB.Net中进行关于XML的工作了

[原文作者]Lisa Feigenbaum                                     
[原文链接]:Panel: Developers moving to VB.Net for projects using XML
 
 
       Visual Basic 9.0 提供了一个新的功能XML Literals,它将使得对XML的编程更加简单方便,并且在很大程度上的减少了我们的代码量。实际上,XML Literals使得我们用Visual Basic去做XML变得如此简单,以至于很多C#开发者也开始趋向于在VB.NET中来进行XML相关工作!如果想要了解更多信息,请参看下面来自TechEd US的内容:
" C# 开发VB XML Literals: 我是怎样终止烦恼而喜欢上Dim"

posted on 2008-12-31 13:47:32 by VBCTI  评论(2) 阅读(1591)

安装Windows 7

想玩Windows 7很久了,而且从网上的评论来看,大家对Windows 7的评论都非常正面。但因为没有参加PDC,没能得到带Windows 7的碟子。最近MVP的邮件列单上说有多余碟子赠送,就去信说想要一份,没想到很快就寄来了。在这里,要感谢微软中国MVP部门,特别是MVP Lead Sisley。

拿到碟子后,迫不及待地在Virtual PC上装了一份,但没有硬件加速,感觉不是很过瘾。

小孩的Dell机器(04年购置的)不久前被一个病毒所扰,修复后很多软件都无法用了,一直吵着要重新安装系统。我想,反正是重装,就装Windows 7,让小孩做beta测试人员吧。

安装比较顺利,而且好像安装的时间也比较短。但可惜,系统居然不认识上面的声卡。小孩说,没audio,那怎么成?

该声卡是Creative Labs的,驱动认出是Multimedia Audio Controller,但Windows 7安装不了驱动。用了Dell原来带来的驱动软件,即使设置了以XP兼容模式运行,也无法安装。在网上查了无数的文章和贴子,试验了很多法子,都没用。被折磨了N个小时后,决定放弃,从一个很老的闲置机器上拔了声卡出来,看是否可用,哈,Window 7居然认出来,安装了适当的驱动程序!

安装的版本是6801,好像是比较早的版本,感觉比较慢。每次使用Windows Explorer访问局域网上的共享文件,如果连不上,Windows Explorer就会死在那里,用Task Manager也杀不死,log off也死在那里,最后只能关机。

从网上的消息看,好像有人已经拿到比较新的版本,反映不错。微软好像在明年一月会开放beta测试,非常期待。

posted on 2008-12-24 13:47:52 by saucer  评论(1) 阅读(4771)

在SharePoint开发中引入Composite Web Application Block

Composite Web Application Block是Web Client Software Factory中一个用来开发Web应用的框架,它能帮助程序员更方便的使用MVP模式。关于CWAB的更多信息,请参考这里

当我们开发SharePoint界面的时候,比如,创建一个Web Part,如果你希望使用MVP模式,是可以引入CWAB的。在这个文档中解释了如何在SharePoint中使用CWAB,但文档里面的一些步骤,其实不一定是最好的。比如,文档中告诉你,将各个程序集放到Web Application的/bin目录中,但我的建议是仍然将它们部署到GAC里面,这样,你就不需要更改Web Application的web.config中的<trust>节点,将代码的默认信任等级提高了。

嗯,总之,我们可以使用CWAB来方便的基于MVP模式来开发Web Part,比如下图所示的项目结构:
image 

上图中的“KBSample.SiteUser.Module”是CWAB中的一个Module项目,包含了与界面UI分离的业务模块。在“Views”目录中包含了定义View的接口和Presenter类:
image

在“Services”目录中包含了与业务操作相关的Service类:
image

而“KBSample.SiteUser”项目则是专门的SharePoint项目(你可以选择使用VSeWSS,或是其它你习惯的工具),其中包含了用来定义Web Part界面的View的实现。

在下面所示的Service接口中,定义了用来真正和SharePoint Object Model交互以获取数据的Service:
image

在Module被初始化时,将上面的Service注册到Container中:
image

对View接口的定义:
image

在Presenter里面,通过[ServiceDependency]来注入所依赖的Service对象(CWAB通过ObjectBuilder来干这件事),同时定义了当View被载入时的操作:
image 

View是通过一个用户控件来实现的,它实现了View接口,通过[CreateNew]来将一个新的Presenter对象注入进来:
image

别忘记在View被载入时,也要执行一下Presenter中的载入方法:
image

如果你熟悉Web Client Software Factory的话,那么在SharePoint开发中引入CWAB应该不是一件困难的事情。不过,由WCSF提供的那些Template和Recipe都不能使用了,项目的结构,需要我们来手工维护(这样反而给了我们很大的自由度:)。

posted on 2008-12-23 17:25:06 by kaneboy  评论(0) 阅读(3421)

SharePoint : 超级Web Application Framework

在Wikipedia上,对“Web Application Framework”的定义是:

一个Web Application Framework是一个设计为支持动态Web网站、Web应用程序和Web Services开发的软件框架。Web Application Framework的目标是减少在Web开发中,与常见的开发工作有关的问题。例如,许多框架都提供了诸如数据库访问类库、模板框架和会话管理,同时,框架通常都能促进代码复用。(注:http://en.wikipedia.org/wiki/Web_application_framework

Wikipedia的定义虽然清晰明了,但未免过于宽泛。根据这个定义,实际上,我们可以再将Web Application Framework分成两种:
■ Web Application Infrastructure Framework
■ Web Application Building Framework

Infrastrcture Framework提供了用来构建Web应用最底层的各种基础框架,诸如HTTP请求的截取和分配、网站与页面处理框架、会话管理、缓存等等。ASP.NET、PHP、JSP就属于Infrastrcture Framework。

Building Framework则是基于Infrastrcture Framework而构建起来的层次更高的Web应用框架,它的目的包括:
■ 将Web应用开发人员的视角从最底层的网站与页面框架,拉到更上面的基于具体应用的业务功能上
■ 用来支撑大型复杂的Web应用,例如超过上千个网站、上万个页面的Web系统,而且提供对服务器场、负载平衡的支持

在.NET领域,DotNetNuke就是一个典型的Building Framework。有了Building Framework,Web开发人员就可以不用从最底层开始构建Web应用系统,而是可以基于Building Framework,开始构建所需要的应用功能组件。一个Building Framework通常会包含下列内容:
■ 成熟的网站与页面结构框架,使得开发人员不用再基于页面、目录来管理整个Web应用
■ 完善且可扩展的用户、角色与权限管理
■ 灵活的UI模型
■ 内置的数据和文件存储能力
■ 具备完善的功能模块封装型
■ 对必要的功能接口提供API
■ 其他…

clip_image002

对于Web应用的开发来说,从静态网站到动态网站,从Infrastructure Framework到Building Framework,几乎是必然的。随着Web应用越来越复杂,开发人员面临的挑战也越来越大:如何维护和管理上千个网站、上万个页面?如何使Web应用能部署到网络负载平衡的环境中?如何使后台的Services与前台Web请求分离?如何提供完善的系统备份与迁移方案?如果我们必须基于Infrastructure Framework来解决这些问题,那么我们可能得将大部分的项目开发周期,花费在解决这些“底层架构”框架之上(虽然有些开发人员确实更喜欢开发“框架”,而不是一个可用的业务系统)。

clip_image004

当基于Building Framework之上进行开发时,开发人员可以更关注业务需求和业务功能的实现。通常,每一种Building Framework都会有一套专门的对功能模块进行封装和打包的模型,开发人员可以基于这一套模型,将自己开发的功能模块以标准化的方式进行封包。一方面,这样可以使得功能模块的部署变得更简单(避免了基于文件的手工拷贝方式),另一方面,开发人员也更容易的将自己开发的功能模块共享给社区(社区中使用同一套Building Framework的开发人员,可以方便的将拿到的功能模块以标准化的方式部署到自己的环境中)。

待续…

posted on 2008-12-23 16:04:09 by kaneboy  评论(0) 阅读(3612)

SQL Server 2008 A/A Cluster Installation

前几天在客户那里安装SQL Server 2008 Active/Active Cluster的时候遇到一些小问题,这里总结一下,因为SQL Server 2008的Cluster安装方法已经和2005非常不同了,而且第一次安装的时候还没装成功,因为那个时候还是RC0的版本,产品组的人告诉我就根本装不上,所以这次安装的时候特别的小心。

SQL Server 2008安装的过程与之前的版本完全不一样了,提供了一个特殊的工具用于安装,因为之前的安装经常出现一些怪异的问题,尤其是在Cluster安装的时候。在前版本的Cluster安装只需要在一个节点安装一次就可以将一个SQL实例安装到多个节点上,这样随然看起来比较方便,但是安装的过程相对较慢,而且非常容易出错,主要是因为为了保证2个节点安装同时成功,需要启动MSDTC来提供事物保证,而在安装的过程中需要安装各种组件例如.net framework,native client ,MSXML等,这样多的组件中止要有一个出现问题都会产生影响,而且安装的时间也没有一个很好的评估。一般我都先分别在节点上装好需要的组件,然后在安装,而且安装的过程中不要包含那些不必要的组件,例如管理工具之类的。

在SQL Server 2008的Cluster安装中,安装的方法发生了变化,将原有的1次安装多个节点改为1次只安装一个节点,这样做得好处是将事物边界缩小,这样出错的概率会比较低(事物尽可能短小,是不变的真理),安装完成一个节点后,在安装另外一个节点的时候选择加入群集,就可以了。

在安装A/P Cluster的时候没有问题,但是在A/A的时候,会遇到一些小问题,这个问题已经有了明确的说明-bug,在SQL Server 2008 CU1中提供的修正。当你安装完成一个实例的Cluster后,在另外一个节点安装第2个实例,这次还是还是选择安装新的cluster节点,这个安装也不会遇到问题,当你在第一节点加入第2实例时,会遇到一个SKU Error,此时需要在第一节点安装CU1,然后再添加第2实例。

当安装完成后,还需要在2个节点上各安装一次CU1,否则实例中的SQL Server版本将不一样,以后应用的时候可能会有问题。

所以A/A Cluster安装会非常麻烦,安装4次SQL Server,安装3次CU1.

 

posted on 2008-12-23 10:24:52 by Sun.wei  评论(0) 阅读(2110)

VS2010中关注代码的开发

[原文发表时间] Friday, December 19, 2008 8:34 PM 
在11月份的一篇博文中,我提到了一个叫做“快速搜索”的功能—Visual Studio 2010中关注代码的功能之一。在过去的岁月中我们在这一领域中已经有所滞后,而在Visual Studio 2010中,我们想专注于这方面并视其为关键。今天,我想分享更多关于我们关注代码开发方面的投资和功能的细节。
高亮引用(Highlight Reference
高亮引用是一种看似简单却易于使用的方式,帮助我们快速理解一段代码并导航到相应的引用。这个功能在一小段延迟之后被自动激活 – 所有在鼠标指针下的引用都被高亮显示。只要按下Ctrl + Shift + UpArrow (或者DownArrow作反向导航),就可以轻松导航到下一个引用。在下面这个例子里,你可以看到该项功能的实际运作;你可能也注意到它推断出哪项重载绑定到当前的选择,而不是使用纯文本匹配的方式。
快速搜索
快速搜索是我先前提到过的专注于代码的功能。它作用于C++、C#和VB的所有符号,以及所有文件类型。它是一种非常轻量的作增量搜索的方式,可以很快的过滤结果并拥有诸如子字符串这样强大的启发式搜索。让我们简单的看一下我可能会怎样使用快速搜索。
假设我要寻找一个事件句柄,我已不太记得它的名字,但知道我使用了典型的命名规则,快速搜索可以帮上我的忙。我的第一步是在快速搜索中输入“Click”来寻找所有带有“Click”的方法签名。
 
这时候,我可能记得它还包含了“Enter”。我再输入一个字母“E”,我就能对所有同时包含“Click”和“E”的结果进行快速过滤。两次输入之间的空格被当作通配符搜索。现在我已经把结果缩减成一个很短的列表,我可以从里面选择我想要的结果。
 
快速搜索甚至还支持驼峰匹配。比如说,如果我输入大写的“SPF”,快速搜索会把结果过滤为那些驼峰匹配或者完全匹配的结果!
调用层次
我们关注的另一个场景是重审依赖关系。比方说,如果我对一个方法作了点改动,我可能会想知道调用这个方法的所有实例。在VS2010中,我们改进了C++中调用浏览器的使用体验,并为C#和VB添加了一个新的调用层次的工具。这些功能让调用方法和被调用方法之间的导航变得更容易(如下所示)。
调用层次工具还允许你察看一个方法的所有重载方法以及接口方法的任意一种实现。比如,如果我想看看谁实现了MakeSound()这个接口方法,我可以通过调用层次看到在Cat和Dog中一共有两个实现。
消耗先行的开发
在Visual Studio中有很多诸如智能感应和快速搜索的功能适用于用户消耗的API定义好之后。然而,我们注意到有很多时候你需要对一个还未完全定义好的API进行开发。比如,在测试驱动开发(TDD)中,我们可以看到测试先行的模式。因此,在VS2010中,我们使消耗先行的开发变得更简单。
 我之前谈过关于“从使用中生成”的功能。该功能通过代码中的符号使用推断出各种类型、方法、属性和构造方法并生成一小段代码。在下面的截屏中,你可以看见“从使用中生成”这一功能的实际运作。
生成构造方法将会生成以下代码:
而且,我们为智能感应也开发了一套“消耗先行”的模式,从而使你可以轻松的触发智能感应中的功能。在现在的Visual Studio中,你可能已经有这样的经历,IDE会自动完成一个标示符,但其实你并不想让它这样做的,因为它还并不存在(考虑一下范式方法返回类型)。在下面的例子里,如果你输入“Puzzle”,智能感应为预先选择“PuzzleTest”。敲击空格或回车键将会插入“PuzzleTest”。
取而代之的,通过敲击Ctrl + Alt + 空格键,你将能触发“消耗先行”的模式。现在,当你输入“Puzzle”,列表中仍然包含了“PuzzleTest”,但却不会主动选择它。你真正输入的内容才是会被插入的内容。
这些是我们在Visual Studio 2010中所作的工作的一些例子。我们的工作旨在让你的工作更简单更高效。
Namaste!

posted on 2008-12-22 15:31:28 by soma  评论(0) 阅读(4321)

转到页面(1/700):
后页末页