NET Framework 中的 WCF 构建于 NET Framework 的扩展点之上从而为构建符合 Web 原则的服务提供一流的支持它包含一个易于使用的 HTTP 编程模型JavaScript Object Notation (JSON) 消息传递功能以及新的整合 API使创建和使用整合的内容变得非常简便凭借此功能集WCF 现已成为将服务连接到 Web 客户端的首选服务平台不论这些客户端是 ASPNET AJAX 控件SilverlightTM 客户端还是浏览器
应该说这对于微软的SOA战略来讲是一个非常有力的改进与增强如何将原有的BS系统富客户端与服务进行通信提供服务和消费服务对于一个企业要实现SOA解决方案来讲始终是一件弥足轻重的任务可以说WCF 提供的简洁的HTTP编程模型弥补了这一缺点
使 NET Framework 中的 WCF 如此引人注目的特色之一是以 Web 为中心的通信与 SOAP 和 WS* 标准组合到了一个服务堆栈和对象模型中这意味着您可以构建这样一个服务即采用 SOAP 和 WS* 在企业内部或跨企业边界进行通信同时还可以将同一服务配置为使用 Web 协议与外部通信
这是多么让人愉快的选择!这意味着对于同一个服务面对不同的场景我们可以选择不同的协议完成与客户端的通信尤其是WCF支持基于TCP传递SOAP/WS*消息而一直以来WCF到WCF之间采用二进制形式的消息传递使得我们可以构建更加快速的企业内部网实现企业信息化的高效与稳定
WCF对于REST的支持已经到了空前强大的地步使用WCF的REST模式可以发送POX(Plain Old XML)消息或者使用联合(Syndication)格式WCF 专门提供了WebHttpBindingWebHttpBehavior以及关于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 还增加了一个工厂类WebServiceHostFactory以及宿主类WebServiceHost前者继承于ServiceHostFactory类后者则继承自ServiceHost类
WebServiceHostFactory 类型适用于 IIS 承载的情形这样就不需要命令性或配置文件承载信息NET Framework 中的 WCF 引入了 svc 文件作为在 IIS 中承载 WCF 服务的激活目标这些文件包含了一些指令类似于 ASPNET 中的页面指令将 WebServiceHostFactory 添加到 svc 文件指令的 Factory 属性会创建一个 ServiceHost添加一个终结点(与 WebHttpBinding 使用适当的约定)将 WebHttpBehavior 添加到该终结点然后打开 ServiceHost
<%@ ServiceHost
Language=C#
Service=PictureService
Factory=SystemServiceModelWebWebServiceHostFactory %>
<%@ ServiceHost Language="C#" Service="PictureService" Factory="System.ServiceModel.Web.WebServiceHostFactory" %>
服务的 nfig 文件不包含任何与 WCF 相关的条目
通过WCF 增加的对Syndication的支持可以非常方便的创建RSS或ATOM源文中写道
NET Framework 充分支持整合内容的创建和使用它支持 RSS 和 ATOM 格式的创建及使用支持添加整合扩展的各种方式甚至还支持实现其他格式的功能编程模型避免了开发人员直接处理整合格式细节从而使其易于使用
虽然新的整合功能由 WCF 小组编写但它并不依赖于 WCF事实上所有与整合相关的类型都是 SystemSyndication 命名空间的一部分虽然它们位于 SystemServiceModelWebdll 程序集中您可以从任何承载了 AppDomain(ASPNETWPF 应用程序NT 服务等)的进程使用 NET Framework 的整合功能这个功能意味着您可以通过任何传输(而不仅仅是 HTTP)提供或使用整合的内容然而当与 WCF 中的 HTTP 编程模型结合后也可以将整合添加到现有的 SOAP/WS* 服务中
如下代码演示了如何检索一个 ATOM 源将其转换为 RSS 然后将新的 RSS 表示输出到控制台
// read an ATOM feed
Uri feedUri = new Uri();
SyndicationFeed feed = SyndicationFeedLoad(feedUri);
// transform it to RSS
RssFeedFormatter formatter = new RssFeedFormatter(feed);
XmlWriter writer = XmlWriterCreate(ConsoleOut null);
// write it to the Console
formatterWriteTo(writer);
writerFlush();