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();
From:http://tw.wingwit.com/Article/program/net/201311/12447.html