Soma的博客中文版

Somasegar's WebLog - 原文地址http://blogs.msdn.com/somasegar
随笔 - 126, 评论 - 145, 引用 - 3

导航

关于

Soma是微软全球副总裁,负责微软公司Developer Division的工作。 微软DevDiv上海团队将Soma的网络日志翻译为中文,在这里与大家分享.

每月存档

最新留言

广告

.NET 的 Reactive Extension (Rx)

[原文发表地址]:Reactive Extensions for .NET (Rx)
[原文发表时间]:Wednesday, November 18, 2009 8:05 AM

我非常高兴的宣布 .NET 的 Reactive Extensions (Rx) 预览版在MSDN DevLabs发布了。

使用Rx, 程序员能够基于我们所熟知的.NET风格和模式编写的简明的声明式代码,来设计和协调异步的和事件驱动的程序。Rx 具有坚定的理论基础,使用传统迭代(Iterator)和观察者(Observer)设计模式之间的二元性来简化异步控制。通过把LINQ的表达方式与范畴论的优雅相结合,Rx 允许程序员不用理会那些使人痛苦和不自然的行为就可以编写异步的代码。

顾名思义,反应式的程序对所在运行环境中的变化做出反应,传统上,程序员使用锁和事件句柄来协调这些变化。Rx 像push-based,或observable、集合一样为异步计算和事件建模,因此它扩大了标准LINQ 顺序运算符和扩展方法的范围,并超越了我们熟悉的基于拉的(pull-based)、或枚举、集合,进入了反应式编程领域。

实际实践

.NET的Reactive Extensions包含一系列扩展方法和为.NET 4及Silverlight 4中新加入的 IObservable<out T> 和 IObserver<in T>接口实现的LINQ标准顺序运算符。加入到.NET中的Observable接口为基于推(push-based)的通知提供了一个公共接口,并能够基于此创建.NET的一些其他功能和类库。Rx致力于事件驱动和异步计算的协调和策划,并且采用新的任务并行库作为它内部的并发机制。

Reactive Extensions可以在任何.NET语言中使用,在F#里面,最有价值的就是.NET事件。它实现了IObservable<out T>接口。除此之外,F#还提供了一些基本的函数来构造observable集合,并且F#开发人员可以使用Rx获取更加丰富的运算符来构造事件和其他observable集合。

Silverlight工具箱利用Rx为其工具箱的拖放框架提供支持,它使用一套WPF API的子集来初始化拖操作和负责与它交互。拖放框架为一些核心的控件比如Treeview, DataGrid, ListBox增加了拖放操作的支持.允许拖放操作以声明方式来描述。这在很大程度上减少了开发时间。 Silverlight异步的创造可视元素,因此我们通常需要编写异步测试代码来确保一个组件已经被正确的创建。Silverlight 单元测试框架提供的Rx功能允许开发人员编写可靠的事件处理代码而不用牺牲代码的可读性。

示例代码

下面的例子展示了一个简单的AJAX风格的反应式程序,它使用Bing的翻译服务来翻译英文并显示结果。

Rx[1]

上图页面中的输入框设计为一个可观察的字符串集合,当用户暂停输入半秒钟左右,可以从中取得相应的字符串值。GetKeyUpEvents 扩展方法将.NET 的KeyUp事件暴露成一个可观察的集合。

    IObservable<string> words = (from keyup in Input.GetKeyUpEvents() select Input.Value).Throttle(TimeSpan.FromSeconds(.5))

要访问Bing的翻译服务,我们只使用了一个简单的WCF服务引用。这个服务在一个函数中使用了标准的.NET BeginInvoke/EndInvoke 或事件驱动模式。而该函数通过Rx提供一个标准辅助函数返回一个Singleton的Observable集合。

    IObservable<TranslationResponse> Translate(this string text, string sourceLanguage, string destinationLanguage){…}

不同计算之间的协调工作使用了LINQ查询语句,通过发送请求到Bing的翻译服务将每一个词翻译成荷兰语、法语和西班牙语,然后使用一个连接(Join)模式等待其中最先完成的2项结果返回。

    var translations = from word in words

    let dutch = Bing.Translate(word, "en", "nl")

    let french = Bing.Translate(word, "en", "fr")

    let spanish = Bing.Translate(word, "en", "es")

    from results in Observable.Join

                 ( dutch.And(spanish).Then((d, s) =>  
                     new { Dutch = d, French = Bing.NoResult, Spanish = s })

                 , dutch.And(french).Then((d, f) =>
                     new { Dutch = d, French = f, Spanish = Bing.NoResult })

                 , french.And(spanish).Then((f, s) => 
                     new { Dutch = Bing.NoResult, French = f, Spanish = s })

                 ).Until(words)

    select results;

最后,我们订阅这个翻译结果并且一旦收到变化通知我们就更新用户界面。

    translations.Subscribe(result =>

    {

        Dutch.InnerText = result.Dutch.GetTranslatedTerm();

        French.InnerText = result.French.GetTranslatedTerm();

        Spanish.InnerText = result.Spanish.GetTranslatedTerm();

    });

开发人员不必担心要在正确的线程里执行订阅服务,Rx运行时会负责照管这些。

更多有用的东西

除了为Observable集合提供扩展方法,Rx也包含了一系列的试验性的类型和名称空间给开发人员试验,它们为基于枚举的Observable集合实现了一些新的扩展方法,并为.NET 3.5提供了一个试验性的PLINQ。

现在就用吧

你可以从Dev Lab 下载Rx 。别忘了在项目论坛告诉我们你的想法哦,还可以去Channel 9看相关视频

Namaste!

View article...

posted on 2009-12-23 09:13:23 by Soma  评论(0) 阅读(2312)

为Windows Azure构建应用程序

[原文发表地址]:Building Applications for Windows Azure
[原文发表时间]:Tuesday, November 17, 2009 11:30 AM

将您的应用或服务构建在云端服务上, 可以让程序员专注开发有用的软件, 使用已经熟练掌握的技术, 而将体系架构、硬件和服务管理等细节交给其它专业人士管理操作。

Windows Azure是微软为了基于云的应用而提供的平台,在去年我们发布了它的CTP(社区技术预览版),而Visual Studio也从第一个CTP版本就支持了Windows Azure应用的开发——您只需要安装Windows Azure Tools的插件即可。您可以通过Web Platform Installer获得在VS 2008上安装的插件。Visual Studio 2010 Beta 2同样支持所有的开发开发,调试,和部署功能,您可以利用它构建您的云端服务。

Windows Azure允许您构建可靠、高质量、并且可以部署和维护的应用程序,随着2009年11月发布的Visual Studio插件, 您可以更加有效地利用Windows Azure平台。

快速入门

开发Windows Azure应用非常类似于开发ASP.NET应用并部署到IIS和Windows Server。尽管有一些区别,Visual Studio还是使得您可以很容易地快速入门。

使用Visual Studio做云端开发,您会注意到的第一件事,恐怕就是Start Page上面,Get Started这个标签页里面对Cloud的介绍了。这个页面提供了丰富的、覆盖面极广的资源,比如Windows Azure社区的链接,定期更新的关于新功能和服务的链接等等。通过这个页面,您不但可以了解到如何创建您的第一个云端应用,也可以在随后的开发过程中获得帮助。

clip_image001

Cloud Service这个项目模板是Visual Studio 2010(和Visual Web Developer 2010 Express)安装的一部分。您可以利用这个模板创建自己的云端服务。点击File | New | Project...菜单,打开Visual Basic或Visual C#选项,选择Cloud Service节点。随后您会看到名为"Enable Windows Azure Tools"的项目模板。

clip_image002

这个模板是Beta 2里面的新功能。通过它,您可以轻松获得最新的工具来开发Windows Azure服务。在创建了项目之后,模板会将您引导到Windows Azure Tools的下载页面。这个步骤能够保证您获得支持最新版本Windows Azure的工具。

clip_image003

在工具安装完成之后, New Project对话框里就会显示Windows Azure Cloud Service的选项。从这时起,Visual Studio就开始支持创建、编辑、构造、调试和部署这些服务。

要创建一个新的工程,选择File | New | Project...菜单来打开New Project对话框,选择Visual Basic或Visual C#节点下面的"Windows Azure Cloud Service"。随后开启的对话框帮助您在您的云端服务中添加Windows Azure Role项目。

clip_image002[1]

Windows Azure的特性之一就是可以跨任意数量的实例,独立地进行规模的放缩。Windows Azure把“components”分割成Roles,Role而一个Role就是一个独立的可放缩在云端运行的部件。每个Role的实例对应一个虚拟机实例。Role分为两种:

· Web Role – 这种Role指的是一个在IIS上运行的网络应用,可以通过HTTP及/或HTTPS端点访问。

· Worker Role – 这种Role指一个后台运行应用程序,运行任意的.NET代码。它可以暴露外部或内部的端点。

无论您想添加哪种Role,我们都提供多个模板选项。比如说,对于Web Role,您可以选择ASP.NET Web Applications模板,ASP.NET MVC 2模板,或者WCF Service Application模板。您可以添加一个或多个Role到您的云计算服务中,然后点击OK,完成创建工程和项目。

clip_image004

创建好服务后,您的工程中会有几个项目。其中之一是Cloud Service项目,它包含了Windows Azure需要的所有的配置信息。有了这些信息,Windows Azure才能运行您的服务,并在项目生成后允许您添加或删除Role。

在Roles目录下右键点击role关联,选择Properties…会弹出配置页面,通过这个页面可以设定Role的属性。

clip_image005

正确运行

使用Visual Studio 2010来开发Windows Azure Cloud Services关键的好处之一是,开发工具能帮助您模拟测试和调试的环境,完全在本地运行您的服务。您甚至不需要使用Windows Azure的账号。这个模拟包括了会在本地模拟运行您的云计算服务的开发网格,, 也包括了会在您的本机上运行Windows Azure存储的开发存储,。有了开发网格和存储,您就可以在离线状态下开发、测试和优化您的云计算服务了。

在运行开发网格的时候,您可以利用Visual Studio强大的调试功能,包括无缝跨跃不同role和role实例的调试体验。下图所示的是一个调试过程,您可以一步步调试一个web role的执行过程。

clip_image006

部署到云

一旦您准备将应用部署到云端,Visual Studio提供了一系列的发布步骤,会将您的云计算服务打包成可部署的Windows Azure格式,随后您可以使用Windows Azure Developer Portal部署您的云端服务。

要了解更多,请访问Cloudy in SeattleCloud Tools这两个博客。

Namaste!

posted on 2009-12-22 12:53:02 by Soma  评论(2) 阅读(2311)

构建VS2010的扩展

[原文发表地址]Creating extensions for VS 2010

[原文发表时间]Wednesday, December 09, 2009 3:42 PM

虽然 Visual Studio 有丰富的内置功能,但任何现代平台的一个关键是功能的可扩展性。

Visual Studio 2010的重点工作之一是不仅对API进行改进,而且对整个扩展开发的生态系统进行提升。目标很简单 — — 我们要使从创建到发布到使用的整个过程都更容易。

开始之前…

您将首先注意到的一件事是简化了的 Visual Studio 2010 SDK。

现在的SDK只有10MB,而在以前它的大小是 100 MB。我们通过将文档示例发布到网上的形式达到了精简的效果,而且这也使我们能够不断及时提供更新内容。现在SDK的安装时间从以前的二十分钟降低到只需一分多钟。

构建

为Visual Studio 2010构建扩展从没有这么容易过。

SDK提供了一组项目模板,可帮助您构建从编辑器视觉效果到菜单命令和工具窗口等各种不同的扩展。

WPF现在是我们扩展模板中的一等公民。现在你立刻就可以启动并运行一个WPF工具窗口。 同样,使用XAML来设计并将一个自定义的用户界面添加到Visual Studio编辑器也很容易。扩展编辑器明显变得更简单、 更可靠。以前,尝试做一些简单操作如获取一个符号的位置,也要花费几行难看的互操作代码。使用新的编辑器API你只需一行代码,而无须任何互操作。

扩展的可能性是无止境的。您想将团队的社交网络工具集成到编辑器中,以便直接在Visual Studio中共享代码吗?构建一个扩展吧。想要将架构图或TFS历史记录也嵌入代码编辑器吗?您可以做到。不喜欢关键字着色的默认样式吗?几行代码就可以改变它。使用扩展,您可以将Visual Studio定制成您喜欢的强大的编程工具。

分享

部署您的扩展插件不再是“火箭科学”(译者注:指复杂的事)。您无须构建MSI来分享您的扩展。所有的扩展项目模板都会生成VSIX文件。VSIX是我们新的部署单元,它利用开放包装公约(Open Packaging Convention)zip格式并利用的xcopy部署功能来部署您的扩展库。

使用新扩展管理器(Extension Manager),用户可以直接在IDE中找到并下载扩展。这种体验要感谢新增的及改进的Visual Studio 库(Visual Studio Gallery),它使您只需上传您的VSIX文件就能与世界共享您的创作。

现在轮到您了

Visual Studio团队博客提供了一个综合的建立您自己的扩展的演练。我建议您访问该博客,然后开始构建您自己的Visual Studio扩展。一旦您构建了一个扩展,您可以上传到Visual Studio 库来与其他人分享。 您可以为您的扩展选择免费共享或收取一定费用,然后使用丰富的HTML来自定义您的扩展页。当您的页面发布以后,您的扩展就能在Visual Studio中的工具菜单下的扩展管理器中找到了。

请参阅 VS 扩展性开发中心扩展示例SDK 文档以了解有关构建扩展的更多信息。我期待在 Visual Studio 库中看到您的扩展。

Namaste!

posted on 2009-12-22 12:51:26 by soma  评论(0) 阅读(2107)

延长Visual Studio 2010和 .NET Framework 4测试期

[原文地址]:Visual Studio 2010 and .NET Framework 4 Beta period extended
[原文发表时间]:Thursday, December 17, 2009 4:14 PM

在今年10月,我们发布了Visual Studio 2010和 .NET Framework 4的Beta2版。此后,我们陆续收到了很多有益的反馈。感谢你们提供的颇具建设性的意见和建议。

我们听到了许多对于Visual Studio 2010和 .NET Framework 4里新特性的肯定。对于这一版本带来的全面的价值提升,很多人也表示满意。

与此同时,我们也收到了很多有关性能方面的反馈,特别是针对一些关键场景下的虚拟内存使用情况。正如你看到的,从Beta1到Beta2,Visual Studio 2010和 .NET Framework 4的性能已经有了大幅提高。接下来,我们会在这方面做更多的工作。在Beta2发布后的几个月里,我们的开发团队埋头苦干,致力于进一步提高产品性能。而且,我们已经看到了一些可喜的成果。

为了验证我们在产品性能方面所做改进的针对性和有效性,同时确保产品的高质量,我们计划适当延长Beta测试阶段。具体来说,我们将在明年二月公开发布一个附带“go live”授权的中间版本,也就是RC版(Release Candidate)。

我们预计将会收到不少基于该RC版的反馈。为了能有足够的时间来处理这些反馈,我们打算把Visual Studio 2010和 .NET Framework 4的最终发布时间往后顺延几个星期。

我邀请您继续把您对产品的反馈意见发送给我们。您的意见和建议将极大地帮助我们提高产品质量。

Namaste!

posted on 2009-12-21 20:34:23 by Soma  评论(0) 阅读(4509)

在VS2010里,构建应用程序安装/部署包

[原文地址]:Building setup and deployment packages in VS 2010
[原文发表时间]:Monday, December 14, 2009 9:14 PM

编写和优化代码是构建应用程序的重要工作之一。一个应用程序一旦构建完成,你需要对其进行部署。然后,你的客户才可以开始使用该应用程序并从中受益。对于很多应用程序而言,最可靠的部署方式是创建一个安装项目,对你的应用程序的部件进行集中打包,组合成一个易于安装的软件包。该软件包一般来说拥有熟悉的界面,方便你的客户使用。

今天,你已可以借助Visual Studio的安装程序项目模板来创建一个安装项目。然而,从我们的客户那里我们了解到,他们需要更多软件安装/部署方面的特性和功能。例如,借助Team Foundation Server构建一个更简单、更现代的开发者体验。最重要的是,提供一条路,可以引领我们的客户获得更先进的部署能力,以适应他们应用程序日益扩大的规模。

为了响应这样的需求,我们和InstallShield的开发公司Flexera合作,专为Visual Studio 2010的客户开发了InstallShield Limited Edition 2010。这个版本是Visual Studio的一个扩展。现在,你就可以下载并使用它来创建基于Windows Installer的软件安装包,并在Windows平台上部署你的应用程序。除了提供Visual Studio安装程序项目的类似功能以外,InstallShield Limited Edition 2010还有易于使用的,现代化的图形开发界面并可以让你使用Team Foundation Server来构建你的软件部署项目。当你的应用程序的规模扩大超过InstallShield Limited Edition 2010的限制,你还可以把基于InstallShield Limited Edition 2010的软件安装项目导入到更高级版本的InstallShield。这将有助于保护你的既有投资。

如何获得它?

要下载使用InstallShield Limited Edition,你可以在Visual Studio 2010里,点击File | New | Project…菜单,在左侧的树形浏览区域里,找到Other Project Types | Setup and Deployment节点,然后选择InstallShield 2010。它包含一个名为“Enable InstallShield Limited Edition”的项目模板。

image

在项目被创建之后,该模板将带领你到InstallShield注册页面。注册成功后,你就可以进入我们合作伙伴的下载页面,下载并使用InstallShield Limited Edition 2010。

image

如何使用它?

安装完该产品后,通过New Project对话框里的一个选项,你可以创建一个基于InstallShield Limited Edition的项目。通过File | New | Project…菜单,打开New Project对话框并在Other Project Types | Setup and Deployment | InstallShield 2010节点下选择“InstallShield Limited Edition Project” 模板。

image

Visual Studio 2010 with InstallShield Limited Edition 2010向我们客户提供了另外一个选择,帮助他们构建更简便的软件部署解决方案。它使部署工作成为自动化构建的一部分,并且提供了一条升级路径,允许你在应用程序日益增长的情况下,迁移到更大更好的软件安装部署解决方案上去。

Namaste!

posted on 2009-12-18 15:08:36 by Soma  评论(1) 阅读(2447)

Powered by: Joycode.MVC引擎 0.5.2.0