艾伟:WCF 3.5对HTTP编程的增强

Justin Smith在MSDN杂志上发表了文章《使用 WCF 和 .NET Framework 3.5 进行 HTTP 编程》,畅谈了WCF 3.5对于HTTP编程的改进。以下几点值得关注:



.NET Framework 3.5 中的 WCF 构建于 .NET Framework 3.0 的扩展点之上,从而为构建符合 Web 原则的服务提供一流的支持。它包含一个易于使用的 HTTP 编程模型、JavaScript Object Notation (JSON) 消息传递功能,以及新的整合 API,使创建和使用整合的内容变得非常简便。凭借此功能集,WCF 现已成为将服务连接到 Web 客户端的首选服务平台,不论这些客户端是 ASP.NET AJAX 控件、SilverlightTM 客户端,还是浏览器。

应该说,这对于微软的SOA战略来讲,是一个非常有力的改进与增强。如何将原有的BS系统、富客户端与服务进行通信,提供服务和消费服务,对于一个企业要实现SOA解决方案来讲,始终是一件弥足轻重的任务。可以说,WCF 3.5提供的简洁的HTTP编程模型,弥补了这一缺点。

使 .NET Framework 3.5 中的 WCF 如此引人注目的特色之一是,以 Web 为中心的通信与 SOAP 和 WS-*
标准组合到了一个服务堆栈和对象模型中。这意味着您可以构建这样一个服务,即采用 SOAP 和 WS-*
在企业内部或跨企业边界进行通信,同时还可以将同一服务配置为使用 Web 协议与外部通信。

这是多么让人愉快的选择!这意味着对于同一个服务,面对不同的场景,我们可以选择不同的协议完成与客户端的通信。尤其是WCF支持基于TCP传递SOAP/WS-*消息,而一直以来,WCF到WCF之间采用二进制形式的消息传递,使得我们可以构建更加快速的企业内部网,实现企业信息化的高效与稳定。

WCF对于REST的支持已经到了空前强大的地步。使用WCF的REST模式,可以发送POX(Plain Old XML)消息或者使用联合(Syndication)格式。WCF 3.5专门提供了WebHttpBinding,WebHttpBehavior,以及关于HTTP动作的特性,例如WebGetAttribute和WebInvokeAttribute。其中,WebGetAttribute对应HTTP的GET动作,而WebInvokeAttribute则可以被除HTTP GET之外的动作所使用。例如:

[ServiceContract]
public interface IPictureService
{
  [OperationContract]
  [WebGet(UriTemplate = "picture/{pictureId}")]
  Stream GetPicture(String pictureId);

  [OperationContract]
  [WebGet(UriTemplate = "picture/t/{pictureId}")]
  Stream GetPictureThumbnail(String pictureId);
 
  [OperationContract]
  [WebInvoke(UriTemplate="update", Method="POST")]
  void UpdatePictureInfo(PictureInfo info);
}

为了支持对应的客户端代理的创建,WCF 3.5还增加了一个工厂类WebServiceHostFactory以及宿主类WebServiceHost,前者继承于ServiceHostFactory类,后者则继承自ServiceHost类。

WebServiceHostFactory 类型适用于 IIS 承载的情形,这样就不需要命令性或配置文件承载信息。.NET
Framework 3.0 中的 WCF 引入了 .svc 文件,作为在 IIS 中承载 WCF 服务的激活目标。这些文件包含了一些指令,类似于 ASP.NET
中的页面指令。将 WebServiceHostFactory 添加到 .svc 文件指令的 Factory 属性会创建一个
ServiceHost、添加一个终结点(与 WebHttpBinding 使用适当的约定)、将 WebHttpBehavior 添加到该终结点,然后打开
ServiceHost:

<%@ ServiceHost   Language="C#"   Service="PictureService"   Factory="System.ServiceModel.Web.WebServiceHostFactory" %>

服务的 web.config 文件不包含任何与 WCF 相关的条目。

通过WCF 3.5增加的对Syndication的支持,可以非常方便的创建RSS或ATOM源。文中写道:

.NET Framework 3.5 充分支持整合内容的创建和使用。它支持 RSS 2.0 和 ATOM 1.0
格式的创建及使用、支持添加整合扩展的各种方式,甚至还支持实现其他格式的功能。编程模型避免了开发人员直接处理整合格式细节,从而使其易于使用。

虽然新的整合功能由 WCF 小组编写,但它并不依赖于 WCF。事实上,所有与整合相关的类型都是 System.Syndication
命名空间的一部分,虽然它们位于 System.ServiceModel.Web.dll 程序集中。您可以从任何承载了 AppDomain(ASP.NET、WPF
应用程序、NT 服务等)的进程使用 .NET Framework 3.5 的整合功能。这个功能意味着您可以通过任何传输(而不仅仅是
HTTP)提供或使用整合的内容。然而,当与 WCF 中的 HTTP 编程模型结合后,也可以将整合添加到现有的 SOAP/WS-* 服务中。

如下代码演示了如何检索一个 ATOM 1.0 源、将其转换为 RSS 2.0,然后将新的 RSS 表示输出到控制台:
// read an ATOM feed
Uri feedUri = new Uri("http://blogs.msdn.com/justinjsmith/atom.xml");
SyndicationFeed feed = SyndicationFeed.Load(feedUri);

// transform it to RSS
Rss20FeedFormatter formatter = new Rss20FeedFormatter(feed);
XmlWriter writer = XmlWriter.Create(Console.Out, null);

// write it to the Console
formatter.WriteTo(writer);
writer.Flush();

时间: 2024-09-25 14:36:47

艾伟:WCF 3.5对HTTP编程的增强的相关文章

WCF 3.5对HTTP编程的增强

Justin Smith在MSDN杂志上发表了文章<使用 WCF 和 .NET Framework 3.5 进行 HTTP 编程>,畅谈了WCF 3.5对于HTTP编程的改进.以下几点值得关注: .NET Framework 3.5 中的 WCF 构建于 .NET Framework 3.0 的扩展点 之上,从而为构建符合 Web 原则的服务提供一流的支持.它包含一个易于使用 的 HTTP 编程模型.JavaScript Object Notation (JSON) 消息传递功能,以及 新的整

WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发

.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(Singleton Service).他们之间有什么联系.WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例.全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服

使用WCF实现SOA面向服务编程—— 架构设计

本文转载:http://kb.cnblogs.com/page/96479/   SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功 能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的.因此,基于SOA的架构也一定是从企业的具体需求开始构建的.但 是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性.业务灵活性是指企业能对业务变更快速和有效地进行响应.并且利用业务

使用WCF实现SOA面向服务编程“.NET研究”—— 架构设计

SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统上海企业网站制作中,具体应用程序的功能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的.因此,基于SOA的架构也一定是从企业的具体需求开始构建的.但是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性.业务灵活性是指企业能对业务变更快速和有效地进行响应.并且利用业务变更来得到竞争优势的能力.对企业级架构设计师来说,创建一个业务灵活的架

“.NET技术”使用WCF实现SOA面向服务编程—— 架构设计

SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的.因此,基于SOA的架构也一定是从企业的具体需求开始构建的.但是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性.业务灵活性是指企业能对业务变更快速和有效地进行响应.并且利用业务变更来得到竞争优势的能力.对企业级架构设计师来说,创建一个业务灵活的架构意味着创建一个

使用WCF实现SOA面向服务编程——使用AJAX+WCF服务“.NET技术”页面开发

在上一篇讲到,如果将BLL层的每一个类都转化为*.svc,这是一个不实在的想法.它会使服务变化复杂,难于管理. 这时候,我们第一时间想到的是23个简单开发模式中的Factory,在这里,Factory正好派上用场.我们把这个Factory称之为管道(pipeline) ,通过这个管道客户端可以随意调用服务器BLL层里面的类. (关于管道的概念,建议参考Cory Isaacson的杰作<多核应用架构关键技术-软件管道与soa>) 当你使用B/S方式开发UI层时,只要了解此开发模式,使用Ajax加

一起谈.NET技术,使用WCF实现SOA面向服务编程——使用AJAX+WCF服务页面开发

在上一篇讲到,如果将BLL层的每一个类都转化为*.svc,这是一个不实在的想法.它会使服务变化复杂,难于管理. 这时候,我们第一时间想到的是23个简单开发模式中的Factory,在这里,Factory正好派上用场.我们把这个Factory称之为管道(pipeline) ,通过这个管道客户端可以随意调用服务器BLL层里面的类. (关于管道的概念,建议参考Cory Isaacson的杰作<多核应用架构关键技术-软件管道与soa>) 当你使用B/S方式开发UI层时,只要了解此开发模式,使用Ajax加

艾伟:C#对游戏手柄的编程开发-API篇(2)

回顾"被动方式"开发 在C#对游戏手柄的编程开发-API篇(1)这篇文章中我们介绍了"被动方式"的开发.在此方式下,我们的程序只扮演一个消息接收者.系统会定时告诉我们某个游戏手柄当前的状态,我们的程序接收到后再按实际需要进行处理即可.但如果你是一个细心的人,你会发现如果直接按消息事件处理的话会存在一个问题,如我们按下某个键(比如向上的方向键)然后放开时,对于我们"人"来说,我们按下与弹起的这两个动作应该只是说明我们只点击这个按钮一次.但对于系统来

一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例

前面为大家介绍过WCF的特点,现在再讲解一下WCF基础概念. 在WCF里,各个Application之间的通信是由EndPoint来实现的,EndPoint是WCF实现通信的核心要素.一个WCF Service可由多个EndPoint集合组成,每个EndPoint只能有一种绑定,就是说EndPoint就是通信的入口,客户端和服务端通过 EndPoint交换信息. <service name = " " >< endpoint address = ""