我的新书

个人主页

个人博客

博客统计信息

51cto专家博客 51cto博客之星
用户名:lihuijun
文章数:202
评论数:117
访问量:266017
无忧币:1490
博客积分:4328
博客等级:7
注册日期:2008-03-20

我最近发表的评论

技巧:使用可扩展.. 回复
呵呵,谢谢,离开了一段时间,现在..
打造自己的LINQ P.. 回复
@miker确实很强大,普及率应该是挺..
谈谈Silverlight .. 回复
@麦迪现在UE非常重要。。。
打造自己的LINQ P.. 回复
@lisa不用客气,要深入LINQ,学习好..
技巧:在Silverli.. 回复
@huiwh谢谢支持:)
本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇四个部分,共22个章节,以Silverlight 2为主要版本从不同的层面进行了阐释,第一部分介绍Silverlight 中的基础知识、控件模型以及它在绘图方面的能力;第二部分介绍了Silverlight中丰富的网络通信功能、托管代码与浏览器之间的互操作性以及数据绑定等;第三部分对Silverlight应用程序的生命周期进行剖析,并介绍了一些调试技巧;最后一部分开发了Deep Zoom应用程序和图表应用程序两个案例。全书对每个知识点都通过示例进行讲解,一步一步带您进入Silverlight世界。

详情敬请访问《Silverlight 2完美征程》官方网站:http://www.dotneteye.cn/silverlight
接口:IExtensibleObject、IExtension和IExtensionCollection,这是可扩展对象模式中最重要的三个接口,也只有这三个接口。
IExtensibleObject自然是定义了可扩展对象,即我们要对谁进行扩展,它的定义非常简单,仅仅是提供了一个只读的属性Extensions,用来提供所有扩展对象的集合,如下代码所示:public interface IExtensibleObject<T> where T : IExtensibleObject<T>
{
IExtensionCollection<T> Extensions { get; }
}
IExtension定义了扩展对象的契约,使对象可以通过聚合扩展另一个对象(此处的另一..
起因
近日不断看到有关“LINQ已死”,“LINQ玩完了吧”的言论,甚至于更有牛人说出“程序开发最终会回到本机代码上”,暂不说这些言论是否正确,且先来看看各位的惊人言论,下面仅摘录部分:
言论1

我看园子里还有蛮多人学习和用Linq to SQL 还写了一系列文章
哎~~ 程序员的悲哀呢
被他们牵着鼻子走
言论2

玩LINQ的人傻了吧
言论3

又是一次证明跟着微软是浪费青春的,小心C#喔,各位,
我发现程序开发最终会回到本机代码上来,而不是托管的
言论4

Linq 是 Anders 最失败的一个作品, 看来当年的牛人真的老了。
linq将..
类别:LINQ|阅读(1025)|回复(2)|(0)阅读全文>>
在10月份Anytao同学推荐了Jurgen Appelo整理的Top 100 Blogs 第三季度版本,现在Jurgen Appelo又整理出了第四季度开发者的Top 100 Blogs,其中有些Blogger的排名发生了变化,退出了前100名,而又很多新的Blogger当选,再次推荐给大家。



TT
LT
Blog
Author

1
1
Joel on Software
Joel Spolsky

2
4
Paul Graham: Essays
Paul Graham

3
2
Coding Horror
Jeff Atwood

4
6
Rough Type
Nicholas Carr

5
7
Scott Hanselman's Computer Zen
Scott Hanselman

6
8
Martin Fowler's Bliki
Martin F..
微软模式与实践小组最近发布了应用程序架构指导袖珍版本,总共有6本,分别介绍了不同类型应用程序的架构指导,包括敏捷架构方法、Mobile应用程序、RIA应用程序、富客户端应用程序、Web应用程序以及Service架构等,非常值得一看。
1. 敏捷架构方法
App_Guide_Agile
下载指导
2. Web引用架构
App_Guide_Web
下载指导
3. 移动应用架构
App_Guide_Mobile
下载指导
4. RIA架构
概述
Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity中的悲观锁定,缓存项版本、日志记录、客户端缓存以及路由表等知识。
悲观锁定
在Velocity提供了一套悲观锁定模型,即在某个缓存项数据处理过程中,数据将处于锁定状态,来自于其它客户端应用程序将无法对该缓存项进行处理。提供悲观锁定的方法主要三个,如下代码所示:
GetAn..
微软 2008 Windows 硬件工程大会(Windows Hardware Engineering Conference 2008,简称WinHEC 2008 China)即将于 2008年12月3-4日在北京万豪酒店盛大开幕,今年是微软第一次在中国独立举办WinHEC大会,以至于JesseQu用WinHEC终于来了一文回忆了自己近18年软件开发工作中对驱动、内核层次开发工作的情愫感慨。在WinHEC 2008开幕之际,让我们一起来回顾一下Windows的发展历史,寻找那些曾经熟悉的符号。
MS-Dos 1.0发布,不知道有多少人还记得这个界面,MS-DOS是Microsoft Disk Operating System的简称,意即由美国微软公司(Microsoft..
概述
Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity中的配置模型、缓存复杂数据和创建分区、使用标签以及ASP.NET SessionState提供者。
配置模型
在本文开始之前,先简单介绍一下Velocity中的配置模型,主要包括三方面的配置,缓存集群的配置,缓存宿主服务器配置以及应用程序的配置,如下图所示:
Velocity_001
缓存集群的配置,可以基于XML、SQL Server CE或者SQL Server数据库来进行存储,包括各个服务器以及所有的命名缓存、是否过期等配置,当我们使用Windows PowerShell管理工具进行配置时,将会修改该配置文件,如下代码所示:<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dcache" type="System.Data.Caching.DCacheSection,
CacheBaseLibrary, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91" />
</configSections>
<dcache cluster="localhost" size="Small">
<caches>
<cache type="partitioned" consistency="strong" name="default">
<policy>
<eviction type="lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
<cache type="partitioned" consistency="strong" name="other">
<policy>
<eviction type="lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
</caches>
<hosts>
<host clusterPort="22234" hostId="1319514812" size="1024" quorumHost="true"
name="TERRYLEE-PC" cacheHostName="DistributedCacheService"
cachePort="22233" />
</hosts>
<advancedProperties>
<partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
connectionString="D:\CacheShare\ConfigStore.sdf" />
</advancedProperties>
</dcache>
</configuration>
在上一篇的示例中,并没有使用应用程序配置文件,事实上使用配置文件是更好的编程实践,首先需要添加一个配置区:<section name="dcacheClient"
type="System.Data.Caching.DCacheSection,
CacheBaseLibrary, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
配置信息包括部署方式,是否启用本地缓存以及缓存宿主等,如下代码所示:<dcacheClient>
<localCache isEnabled="true" sync="TTLBased" ttlValue="300" />
<hosts>
<host name="localhost" cachePort="22233"
cacheHostName="DistributedCacheService"/>
</hosts>
</dcacheClient>
现在Velocity CTP2对于应用程序使用配置的支持似乎有些问题。缓存宿主的配置放在DistributedCache.exe.config文件中,可以在Velocity安装目录下找到。
缓存复杂数据类型
在Velocity中,可以缓存任何类型的数据,如CLR对象、XML或者二进制数据等。现在看一个简单的示例,如何缓存复杂类型数据,定义一个如下的Customer类,注意要能够序列化:[Serializable]
public class Customer
{
public String ID { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public int Age { get; set; }
public String Email { get; set; }
}
对应用程序做配置,参考本文的配置模型部分,使用方法与简单数据类型的基本一致,如添加缓存项,使用Customer主键作为缓存键,其中GetCurrentCache()方法的实现请参考上一篇文章:Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
ID = "C20081117002",
FirstName = "Terry",
LastName = "Lee",
Age = 25,
Email = "lhj_cauc[#AT#]163.com"
};
cache.Add(customer.ID, customer);
获取缓存项:Cache cache = GetCurrentCache();
Customer customer = cache.Get("C20081117002") as Customer;
移除缓存项:Cache cache = GetCurrentCache();
cache.Remove("C20081117002");
更新缓存中数据,可以有两种方法,一是直接使用缓存索引,如果确保缓存键存在:Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
ID = "C20081117002",
FirstName = "Huijui",
LastName = "Li",
Age = 26,
Email = "lhj_cauc[#AT#]163.com"
};
cache["C20081117002"] = customer;
另外一种是使用Put方法,如果缓存键不存在,它将会新增到缓存中,否则会进行覆盖,如下代码所示:Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
ID = "C20081117002",
FirstName = "Huijui",
LastName = "Li",
Age = 26,
Email = "lhj_cauc[#AT#]163.com"
};
cache.Put(customer.ID, customer);
使用分区
在实际部署中,经常会出现多个应用程序共享同一个缓存集群,这不可避免的会出现缓存键冲突,如上面的示例中使用CustomerID作为缓存键,此时可以使用Velocity中的分区功能,它会在逻辑上把各个命名缓存再进行分区,这样可以完全保持数据隔离,如下图所示:
TerryLee_0216
图中共有三个命名缓存,其中在缓存Catalog中又分区为Sports和Arts。在Velocity中对于分区的操作提供了如下三个方法,可以用于创建分区,删除分区以及清空分区中所有的对象:public void ClearRegion(string region);
public bool CreateRegion(string region, bool evictable);
public bool RemoveRegion(string region);
如下代码所示,创建了一个名为“Customers”的分区,在调用Add方法时可以指定数据将会缓存到哪个分区:Cache cache = GetCurrentCache();
string regionName = "Customers";
cache.CreateRegion(regionName, false);
Customer customer = new Customer()
{
ID = "C20081117003",
FirstName = "Terry",
LastName = "Lee",
Age = 25,
Email = "lhj_cauc[#AT#]163.com"
};
cache.Add(regionName, customer.ID, customer);
可以使用Get-CacheRegion命令在Windows PowerShell中来查看一下当前缓存集群中所有的分区信息,如下图所示:
Velocity_002
同样在检索缓存数据时,仍然可以使用分区名进行检索。
使用标签
在Velocity还允许对加入到缓存中的缓存项设置Tag,可以是一个或者多个,使用了Tag,就可以从多个方面对缓存项进行描述,这样在检索数据时,就可以根据Tag来一次检索多个缓存项。为缓存项设置Tag,如下代码所示:Cache cache = GetCurrentCache();
string regionName = "Customers";
Customer customer1 = new Customer()
{
ID = "C20081117004",
FirstName = "Terry",
LastName = "Lee",
Age = 25,
Email = "lhj_cauc[#AT#]163.com"
};
Customer customer2 = new Customer()
{
ID = "C20081117005",
FirstName = "Terry",
LastName = "Lee",
Age = 25,
Email = "lhj_cauc[#AT#]163.com"
};
Tag tag1 = new Tag("Beijing");
Tag tag2 = new Tag("Tianjin");
cache.Add(regionName, customer1.ID, customer1, new Tag[] { tag1, tag2 });
cache.Add(regionName, customer2.ID, customer2, new Tag[] { tag2 });
这样就可以对设置了Tag的缓存项进行检索,根据实际需求选择使用如下三个方法之一:GetAllMatchingTags(string region, Tag[] tags)
GetAnyMatchingTag(string region, Tag[] tags)
GetByTag(string region, Tag tag)
第一个检索匹配所有Tag的数据,第二个检索匹配所有Tag中的任意一个即可,最后只使用一个Tag,如下代码所示:string regionName = "Customers";
Tag[] tags = new Tag[] { new Tag("Beijing"),
new Tag("Tianjin")};
List<KeyValuePair<string, object>> result
= cache.GetAllMatchingTags(regionName, tags);
使用Tag功能对于检索缓存项提供了极大的灵活性,对于任何一个数据,都可以使用多个Tag从很多方面去描述它。
ASP.NET SessionState提供者
Velocity还提供了对于ASP.NET SessionState提供者的支持,可以通过配置把Session信息缓存到缓存集群中,添加Velocity配置区:<section name="dcacheClient"
type="System.Data.Caching.DCacheSection,
CacheBaseLibrary, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
配置缓存客户端信息:<dcacheClient>
<localCache isEnabled="true" sync="TTLBased" ttlValue="300" />
<hosts>
<host name="localhost" cachePort="22233"
cacheHostName="DistributedCacheService"/>
</hosts>
</dcacheClient>
配置SessionState信息:<sessionState mode="Custom" customProvider="Velocity">
<providers>
<add name="Velocity"
type="System.Data.Caching.SessionStoreProvider,ClientLibrary"
cacheName="default"/>
</providers>
</sessionState>
需要指定使用哪个命名缓存,但是该功能似乎到目前还存在问题,无法测试通过L
总结
本文简单介绍了Velocity的配置模型,以及如何缓存复杂数据类型,对命名缓存分区,为缓存项设置Tag,以及对于ASP.NET SessionState的支持,希望对大家有用。[/img]..
概述
Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity的一些预备知识、安装配置以及开发一个简单的示例。
简介
既然是分布式的缓存平台,客户端应用程序能够与缓存服务器集群中的任何一台服务器通信,并且执行缓存操作,如新增缓存项,移除缓存项等。在Velocity中,提供了一套统一的API,开发者可以使用任何一种.NET语言来访问这些A..
2008-11-18 00:01:00
今天ScottGu在自己的Blog上对目前正在开发中的Silverlight 3版本的新特性做了一些透露,Silverlight 3的新特性包括视频方面的增强,包括支持H.264 video;图形方面的增强包括3D支持和GPU硬件加速;开发方面的增强包括更加丰富的数据绑定支持和更多的控件。另外,从Silverlight 3起在开发工具方面也会有较大的改进,将会完全支持在Visual Studio或者Visual Web Developer Express中进行Silverlight应用程序的编写和交互设计(这点也是Silverlight 2在Visual Studio 2008中开发最为开发者诟病的一点),另外还会为数据绑定提供可视化工具..
概述
WCF是一个通信框架,同时也可以将它看成是一个消息处理或者传递的基础框架,它可以接收消息、对消息做处理,或者根据客户端给定的数据构造消息并将消息发送到目标端点,在这个过程中,一切都是围绕“消息”而展开的。WCF在消息处理体系结构提供统一编程模型的同时,还允许灵活的表示数据和传递消息,本文将介绍如何配置消息支持各个SOAP和WS-Addressing版本或者不用任何SOAP和WS-Addressing,以及如何控制消息状态等。
消息契约
在大多数情况下,开发者只关心数据契约而不必考虑携带这些数据的消息,然而某些特殊情况下,需要..
引言
从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的。在《WCF专题系列(8):深度通道编程模型Part 1—设计篇》中,对于WCF中的通道模型有了深入的认识,本文中,我将通过实例来说明在通道模型中,服务端是如何接收消息,客户端是如何发送消息的。
服务端通道
本文将不使用WCF的编程模型,而直接利用通道模型来进行通信,这样有助于我们更进一步加深对服务端处理消息的认识,在服务端侦听并接收消息的第一步需要创..
引言
从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的。为了简化这些处理,在WCF中提供了两种模型,一是针对开发者的应用程序编程模型;二是用来通信的通道模型,这样对于开发者来说,只要了解应用程序编程模型就足够了,而不会涉及到通道模型,然而,对于通道模型进行必要的学习,可以让我们真正理解WCF中“通信”概念,了解WCF的 整个架构体系,从而构建出更加健壮的WCF服务或者对WCF框架进行扩展。在本文中,我们将进..
概述
写下本篇文章源于参加Tech.Ed的一场关于Window PowerShell的课程。虽然之前也经常关注,但从没有亲自体验过。Windows PowerShell 是一种新的命令行外壳和脚本语言,用于进行系统管理和自动化任务,它建立在 .NET Framework 的基础上,可使 IT 专业人员和开发人员控制和自动完成Windows 和应用程序的管理。更为强大之处在于它可以调用.NET Framework中的类库,可以与COM、ADO、XML等交互。在本文中让我们一起来体会一下回归Doc操作的快感,进入强大无比的Windows PowerShell世界。
在Windows PowerShell中包括了:
1. 129 个命..
概述
每个服务终结点都包含一个地址Address、一个绑定Binding 和一个契约Contract。契约指定可用的操作,绑定指定如何与服务进行通信,而地址指定查找服务的位置,在WCF专题系列前5篇中,深入了解了WCF中寻址的细节。本文为消息如何传递之绑定第二部分,将详细介绍WCF内置的各种绑定元素,绑定元素之间的顺序以及如何创建一个自定义的绑定元素。
在WCF专题系列(6):消息如何传递之绑定Part 1一文中,我提到绑定由绑定元素组成,每个绑定元素用来描述终结点与客户端通信方式中的某个方面,在发送或接收消息时,每个绑定元素都表示..
 <<   1   2   3   4   5   >>   页数 ( 1/14 )