全面迎接.Net3.0时代的到来(WCF/WF/WPF/LINQ)

全面迎接.Net3.0时代的到来(WCF/WF/WPF/LINQ)

.Net3.0从2006年发布预览版到今天(最高版本已经达到.Net3.5了),已经日趋稳定,.Net2.0做为3.0/3.5的一个子集继续被支持,但3.0又引入了很多激动人心的新特性(虽然这些特性在业内早已在其它说来语言上实现,但MS的优势在于,将别人的优势融入自己的产品体系后,将变得更强大优秀)

这里介绍几个部分新特性:

(一).LINQ的支持
经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与数据库( database )和 XML 相关。

   LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。

包含 DLinq 和 XLinq
语法实例
C#3.0 LINQ 查询语法
首先来看一个很简单的LINQ查询例子,查询一个int 数组中小于5的数字,并按照大小顺序排列:
class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };
        var m = from n in arr where n < 5 orderby n select n;
        foreach (var n in m)
        {
            Console.WriteLine(n);
        }
        Console.ReadLine();
    }
}
上述代码除了LINQ查询语法外,其他都是我们所熟悉的语法,而LINQ查询语法跟SQL查询语法很相识,除了先后顺序。

Q:为何 LINQ 查询语法是以 from 关键字开头的,而不是以 select 关键字开头的?select 开头这种写法跟SQL的写法更接近,更易懂呀?
A:简单来说,为了IDE的智能感知(Intelisence)这个功能,select 关键字放在后面了。
编程语言以 select 开头写LINQ查询语法不是没出现过,你如果使用过2005年的VB9 CTP 版本,那时候VB9的LINQ查询语法就是 select 关键字在前面,但是 select 关键字在前面,在做智能感知(Intelisence)时候就很头大。经过微软IDE组的权衡,确定了把 from 关键字放在最前面。
比如:你看 http://blog.joycode.com/saucer/archive/2005/09/16/63513.aspx 这篇博客,那时候 VB9 LINQ的查询语法还是 select 参数在最前面。不过后来 VB9 测试版改成了跟 C# 一样的做法, from 关键字放在最前面了。
更详细的解释,来自装配脑袋
假设你要书写这样的代码:Select p.Name, p.Age From p In persons Where xxx ,代码是一个个字符输入的。
我们在写到 p in persons 之前,p 的类型是无法推测的,所以写 Select p. 的时候,Name之类的属性不会弹出智能提示来。
这样就需要先去写 From 这句,再回来写 Select。
微软IDE组经过反复考虑决定,还不如就把 Select 写到后面了。于是编程语言中的写法就确定这样来写了。
VB9 的这个变化可以参看这篇博客:
Select/From vs. From/Select revisited...

我们再来看一个稍稍复杂的LINQ查询:
在我们罗列的语言字符串中,我们希望按照字符长短,分类罗列出来,实现代码如下:
static void Main(string[] args)
{
    string [] languages = {"Java","C#","C++","Delphi","VB.net","VC.net","C++ Builder","Kylix","Perl","Python"};
    var query = from item in languages
                orderby item
                group item by item.Length into lengthGroups
                orderby lengthGroups.Key descending
                select lengthGroups;
    foreach (var item in query)
    {
        Console.WriteLine("strings of length ",item.Key);
        foreach (var val in item)
        {
            Console.WriteLine(val);
        }
    }
    Console.ReadLine();
}
其中的 into 关键字表示 将前一个查询的结果视为后续查询的生成器,这里是跟 group  by  一起使用的。
LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL 由于是二维结构,Group by 的一些逻辑受二维结构的约束,无法象 LINQ 中的Group by 这么灵活。

 

Linq的内部执行原理浅析

LINQ(Language Integrated Query)是Visual Studio 2008中的领军人物。借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。目前为止LINQ所支持的数据源有SQL Server、XML以及内存中的数据集合。开发人员也可以使用其提供的扩展框架添加更多的数据源,例如MySQL、Amazon甚至是Google Desktop。

一般来讲,这类查询语句的一个重要特点就是可以并行化执行。虽然有些情况下并行可能会带来一些问题,但这种情况非常少见。这样也就水到渠成地引出了PLINQ这个并行处理的LINQ类库。

PLINQ原名为Parallel LINQ,支持XML和内存中的数据集合。执行于远程服务器上的查询语句(例如LINQ to SQL)显然无法实现这个功能。
将LINQ语句转换为PLINQ语句极为简单——只需要在查询语句中From子句所指定的数据源的最后添加.AsParallel()即可。随后Where、OrderBy和Select子句将自动改为调用这个并行的LINQ版本。

据MSDN Magazine介绍,PLINQ可以以三种方式执行。第一种是管道处理:一个线程用来读取数据源,而其他的线程则用来处理查询语句,二者同步进行——虽然这个单一的消费线程可能并不那么容易与多个生产线程同步。不过若是能够仔细配置好负载平衡的话,仍然会极大地减少内存占用。

第二种模式叫做“stop and go”,用于处理结果集需要被一次返回时(例如调用ToList、ToArray或对结果排序)的情况。在这种模式下,将依次完成各个处理过程,并将结果统一返回给消费线程。这个模式在性能上将优于第一种模式,因为它省去了用来保持线程同步所花费的开销。

最后一种方法叫做“inverted enumeration”。该方法并不需要实现收集到所有的输出,然后在单一的线程中处理,而是将最终调用的函数通过ForAll扩展传递到每个线程中。这是目前为止最快的一种处理模式,不过这需要传递到ForAll中的函数是线程安全的,且最好不包含任何lock之类的互斥语句。

若是PLINQ中任意的一个线程抛出异常,那么所有的其他线程将会被终止。若是抛出了多个异常,那么这些异常将被组合成一个MultipleFailuresException类型的异常,但每个异常的调用堆栈仍会被保留。
 

(二).WCF的引入
笔者:相对于传统的三层架构,WCF相当于在最终[客户]表现层与业务逻辑层中插入了一个服务层
 
使用Web服务的每一种主要语言或平台都把与自身相关的特性集合在一个名字下,Java开源开发人员使用Axis,PHP阵营则使用PEAR,而基于微软工具的开发则使用WCF (Windows Communication Foundation).
  WCF曾被称为Indigo,实际上不只是一个Web服务项目,它的目的是要把所有的分布式系统技术提供一种保护伞,其核心是一套面向服务的API。
  现在,.NET框架是利用微软工具开发应用程序的最先进的方法。它已经为解决一系列C/S交互场景提供了办法。
  比如,ASP.NET Web Services(ASMX)提供了通过Web服务开发应用程序接口的最简单的形式,而.NET Remoting则是使.NET和.NET应用程序交互的核心。
  但在另一方面,很多系统不是构建得超出了.NET框架上下文的范围,就是得通过其它办法来进行特殊处理。
  对于需要Web服务标准支持(WS-*说明书)的那些应用程序,微软则使用了Web Services Enhancements (WSE)。而对于那些遗留系统,经常用到的分布式交互技术则是用于异步通讯的Microsoft Messaging、COM+以及Microsoft's Host Integration Server。
  你应该注意到所有这些场景都有一个相同的主题:分布式应用的通信。但是,很显然,每一种技术都用到不同的方法或技术来解决这个问题。而WCF背后的初衷就是针对应用程序中用到的所有通信接口为开发人员提供一步到位的方法。
  WCF是对.NET技术的一个补充,而非现在.NET框架的替代品。但当你仔细思考把微软的分布式技术都统一到同一个屋檐下会达到怎样的效果后,你就会领悟到为什么说WCF/Indigo是简化创建面向服务设计的重要组成部分,以及它为什么是未来微软的操作系统Vista的一个基础。
  在使用WCF时,你不仅只需要懂得一种方法就足以把很多应用作为服务暴露出来,而且你还可以用同样的方法来对付当前技术本身的底层细节。
  用WCF服务使能化应用程序的真正概念并非与那些用来运行Web服务的概念不同。

(三).WWF/WF工作流的支持
笔者:举个例子,先下订单-->再确认订单-->发货-->收款-->交易完成 这就是一个顺序工作流. WorkFlow在处理这类业务逻辑时,就能派上用场
 
Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案。作为即将问世的 Microsoft WinFX 的组成部分,Windows Workflow Foundation 同时提供了 API 和一些工具,用于开发和执行基于工作流的应用程序。Windows Workflow Foundation 提供单个统一的模型,以便创建跨越多个类别应用程序的端到端解决方案,包括人力工作流和系统工作流。

Windows Workflow Foundation 是一个广泛且通用的工作流框架,并且从下到上、在每个级别都针对可扩展性进行了设计。基于 Windows Workflow Foundation 的解决方案,由得到 Microsoft .NET 代码支持且在宿主应用程序中运行的互连组件组成。就像在定制的环境中以可视方式创建 Web 页一样,您需要在可视设计器中制订特定工作流的步骤,并且添加代码隐藏工作流组件以实现规则并定义业务过程。

Windows Workflow Foundation 提供一个工作流引擎、一个 .NET 托管 API、运行库服务以及与 Microsoft Visual Studio 2005 集成的可视化设计器和调试器。可使用 Windows Workflow Foundation 来生成并执行同时跨越客户端和服务器的工作流,以及可在所有类型的 .NET 应用程序内部执行的工作流。

工作流指的是:是以活动示意图形式定义的人力或系统过程模型。活动 是工作流中的一个步骤,并且是工作流的执行、重用和创作单位。活动示意图表达规则、操作、状态以及它们的关系。Windows Workflow Foundation 工作流通过安排活动而设计,然后它编译为 .NET 程序集,且在工作流运行库和公共语言运行库 (CLR) 中执行。

(四).WPF(Windows Presentation Foundation)

笔者:vista中的很cool的界面,以及07年很火的sliverlight就是WPF的实现之一
 
WPF的全稱是Windows Presentation Foundation,是微軟新發佈的Vista操作系統的三大核心開發庫之一,其主要負責的是圖形顯示,所以叫Presentation(呈現)。

作為新的圖形引擎,WPF是基於DirectX的,當然新增了很多新的功能。其2D和3D引擎的強大看看Vista的界面就明白了,再加上其對Aero圖形引擎的支援,更加讓你感到神奇。順便提一下,Aero是專門為3D桌面開發的引擎,可以讓桌面實現神奇的3D翻轉,這絕對是操作系統有史以來的一次神奇嘗試,雖然對硬件設定的要求也是驚人的,此前已有相關報道稱,Vista對顯卡十分挑剔就是出於執行Aero的考慮。

WPF前景分析

WPF其實不僅僅是圖形引擎而已,它將給Windows應用程式的開發帶來一次革命,因為新的架構提供了一種全新的開發模式。當然對於普通使用者而言,最直觀的就是界面越來越漂亮,看起來越來越舒服了;但對於開發人員而言,界面顯示和程式碼將更好的得到分離,這與從前的桌面應用程式開發有很多不同(界面設定和程式碼是融合在一起的),這是比較具有革命性的改變之一。還有就是桌面應用程式和瀏覽器應用程式的融合,根據ms的承諾,正在開發中的WPF/E,即WPF Everywhere版本,將為基於WPF的應用程式提供全面的瀏覽器支援,這意味著未來開發出的應用程式將可以基於瀏覽器在不同的操作系統上執行,當然由於目前還在開發中,我們並不確定會不會有一定的限制,根據WPF/E開發組的定義,WPF/E仍然是WPF的子集,而不是後繼版本。總體而言,WPF的前景應該是一片光明。

目前開發界的對WPF響應程度

目前已有很多人開始考慮或者已經轉向WPF,一場新的學習熱潮已經開始。但根據我最近的學習和瞭解,國內關於WPF的資料很少,除了msdn提供的資料以外,基本都是來自國外的資料,有些則是國外開發人員blog上的資料,當然都是英文的。因此如果現在能夠引進一些WPF的書絕對是很好的時機。而且國外目前的幾本WPF書也是剛剛上市,如果我們可以盡快引進的話,絕對可以輔助國內開發人員在最短時間內趕上國際步伐。

目前微軟針對WPF提供的服務和支援

隨著Vista RTM的發佈,微軟新一輪的技術推廣已經開始。其實在此之前,WPF已經有很大的推廣,因為CTP版本已經發佈了有一段日子了。當然很多開發人員主要以技術研究為主,也有少數公司已經開始從事基於WPF的產品研發工作。

1. 目前WPF的正式版本已經發佈(隨.net framework 3.0正式版發佈),你可以從msdn上免費下載

2. 相應的技術支援已經開始,但目前僅限於大客戶,主要做售前技術支援,對於普通開發人員的技術支援可能要等到明年2月份才會開始(個人知道的情況,請以微軟官方技術支援網站發佈的訊息為準)

3. WPF的VS2005外掛目前還只有社區預覽版(CTP版),也是從msdn上免費下載的,但正式版恐怕還要等一段時間,但使用CTP版本確實已經可以在VS2005中進行所見即所得的WPF開發。

4. WPF/E CTP版本已經發佈,你可以在msdn上免費下載。同時發佈的還有WPF/E Sample Pack for CTP。

时间: 2024-11-02 01:47:37

全面迎接.Net3.0时代的到来(WCF/WF/WPF/LINQ)的相关文章

互联网技术也有七年之痒,云计算2.0时代已经到来

近日,以"大变革 新生态"为主题的第九届中国IDC产业大典在北京国家会议中心举办,大会现场将云集国内外电信专家.互联网高层.行业精英.政府主管部门领导也将亲临现场,其中来自中国信息通信研究院(工信部电信研究院)通信标准所副所长何宝宏就<云计算技术2.0时代>主题进行了精彩分享,他表示,经过多年研究,发现互联网技术存在七年之痒的节奏,当然云计算也不例外. 互联网技术的七年之痒 何宝宏表示,今年我的主题是云计算技术2.0时代,为什么说是2.0时代?因为我多年的研究发现一个技术的

陈一彤:营销3.0时代的到来

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 我是专职搞营销传播的,我在20多年前是搞广告行业的.当时我们做广告的时候,我觉得这个行业是非常光芒的.但是在最近这10年内,我们讨论的一个问题是什么?我们这个行业现在衰落了,利润越来越薄.我们已经从M1.0过渡到M2.0再到M3.0.M1.0就是你带着你的客户,我们领着我们的客户,一个客户.一个广告公司,加起来就可以了,很容易做.但是很快就进

真正的WEB2.0时代即将到来

前言:这个文章写于2005年底,当时WEB2.0概念刚刚兴起,还没到现在剩饭炒三遍狗都不吃的地步,所以才有了这个标题, 请大家海涵.个人网站--这个几乎与互联网同时流行起来的名词,相信所有网民都不会陌生.要知道当初即使是YAHOO!(雅虎)也只不过杨志远和其同学合作创立的个人网站而已.可以这么说,个人网站从互联网诞生那天起,就已经存在了. 中国第一个个人网站到底是谁建立的,已经无从追述,只知道95年开始国内一批颇有意识的一流技术高手们,已经在网上安了家.当初那个年代,在网上有一个个人网站一定是超

凤凰新媒体王育林:Web2.0时代还没有完全到来

8月24日早间消息,http://www.aliyun.com/zixun/aggregation/1717.html">凤凰新媒体执行副总裁王育林今天上午在互联网大会现场表示,现在很多人讲是不是Web3.0已经来了.我们回想一下当时说的Web2.0的概念,我们认为用户创作内容.用户传播内容的时代,这是我们当时说的Web2.0.但是现在我们回过头来再看,我们自己认为其实Web2.0时代确实到来了,但是还没有完完全全的到来. 以下为王育林演讲实录: 王育林:各位嘉宾.同行大家上午好!2011

跨境电商2013产业报告发布 3.0时代到来

2014年11月跨境电商行业发布了<2013-3721.html">2014年中国跨境电商产业研究报告>白皮书.白皮书中详细描述了跨境电商由1.0时代到3.0时代的发展.敦煌网.速卖通等各大平台的发展以及行业未来发展趋势. 报告指出,跨境电商行业发展到今天经历了三个阶段.第一阶段,跨境电商1.0时代:这个时期跨境电商主要商业模式是网上展示.线下交易的外贸信息服务模式.其主要代表是阿里巴巴.环球资源网.第二个阶段,跨境电商2.0时代:这个阶段,跨境电商平台开始摆脱纯信息黄页,将线

六年亲历,见证中国大数据技术与应用时代的到来

转自:http://www.csdn.net/article/2013-09-30/2817098-big-data-technology-conference-dec 六年亲历,见证中国大数据技术与应用时代的到来 发表于2013-09-30 09:39|8875次阅读| 来源CSDN|34 条评论| 作者郭雪梅 BDTCHBTC大数据Hadoop 摘要:08年至今,六年的时光,伴随技术大会的发展,我们亲历和见证了中国大数据技术与应用时代的到来!第七届中国大数据技术大会(Big Data Tec

总结Web2.0时代最关心的话题

中介交易 SEO诊断 淘宝客 云主机 技术大厅 Web2.0影响了个人和企业 以门户为王的Web1.0时代,互联网对于网民而言更多的是一种工具,电脑对于白领是台打字机.对小孩是台游戏机;互联网对于企业就是张内容.形式不受限制的名片,对于个人也就是个浏览新闻.打字游戏的家用电器.到如今这个革新中的Web2.0时代,人们将越来越多地因为Web2.0,而改变自己的生活方式.Web2.0最初是相对与传统门户提出的概念,它更多代表一种以用户为中心的服务理念.而不仅仅是技术,以博客的广泛应用为代表,每个人都

工业4.0时代,CRM助力企业智能化变革

"工业4.0"是以智能制造为主导的第四次工业革命.工业4.0时代的到来,将对中国的制造产业引起新一轮的变革.中国制造的产品,从小到笔芯.纽扣.吸管,大到汽车.轮船.工厂设备等,甚至包括许多国防军工品,在全球都随处可见.中国制造业发展迅速,但是在大数据.云计算.移动互联网时代的大力冲击下,只有对企业进行智能化转变与升级,才能够走向更好的发展. 中国企业要想顺利地完成智能化转型,借助CRM这款专业的客户关系管理软件,将会大大缩短变革历程,加快转型升级的完成. CRM:实现个性化+定制化道路

喜临门全球首个智能床垫健康睡眠系统见证睡眠3.0时代

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 9月10日,喜临门携全球首个智能床垫健康睡眠系统在上海新国际博览中心隆重亮相,这一颠覆行业的系统见证了睡眠3.0时代的到来,传统睡眠时代即将走向历史,寝具行业也必将迎来一次颠覆性的变革. 喜临门研发总监马博介绍智能健康睡眠系统 肩负人类睡眠重任的床垫在潜移默化的进行着这样的进化:从第一代睡眠系统告别硬板床开启弹簧床垫时代,到第二代睡眠系统开始