使用OData協議查詢Windows日誌

來源:互聯網
上載者:User

OData開放資料協議是微軟針對Google的GData推出的,旨在推廣Web程式資料庫格式標準化的開放資料協議,微軟將 OData 定義為基於 HTTP、AtomPub 和 JSON 的協議,增強各種網頁應用程式之間的資料相容性,以提供多種應用、服務和資料商店的資訊訪問。並且,微軟已經正式推出了 OData SDK,包含了 .NET、Java、PHP、Palm WebOS 和 iPhone 的支援。其中 .Net OData 用戶端基於 Apache 授權開源。微軟多款產品已經支援 OData 包括 SharePoint Server 2010, Excel 2010, Dynamics 等。

微軟第一代資料交換協議叫ODBC(開放資料庫聯結 Open Database Connectivity),目前仍舊可見於window和linux的原生程式開發之中,其目的是為作業系統下的應用程式之間提供統一的資料互動的 API,是函數式的。之後,微軟推出了第二代:OLE DB,帶來了OOP式樣的互動API,以及跨網路的資料互動的可能性(通過DCOM),OLE DB 標準的具體實現是一組C++ API 函數,就像ODBC 標準中的ODBC API 一樣,不同的是,OLE DB 的API 是符合COM 標準、基於對象的(ODBC API 則是簡單的C API)。使用OLE DB API,可以編寫能夠訪問符合OLE DB 標準的任何資料來源的應用程式,也可以編寫針對某種特定資料存放區的查詢處理常式(Query Processor)和遊標引擎(Cursor Engine),因此OLE DB 標準實際上是規定了資料使用者和提供者之間的一種應用程式層的協議(Application-Level Protocol)。在雲端運算時代,web應用已經是主流,程式主要通過HTTP Request來表達需求,通過HTTP Response來擷取結果,ODBC和OLE DB都已無法使用。微軟於是開發了其第三代資料互動協議:OData開放資料協議。

在SOA的世界中,最重要的一個概念就是契約(contract)。在雲端運算的世界中,有關通訊的最重要的概念也是契約。XML具有強大對資料的描述能力,Atom格式和AtomPub都建立在XML之上,在Google和微軟的推動下,也已經成為標準。但是,Atom/AtomPub和ODBC /OLEDB這樣的真正資料互動協議相比較,還有著根本上的欠缺:缺乏資料類型的具體描述,降低了互動效能。缺乏對資料查詢的控制能力,比如返回特定的資料集合的區間,或者說分頁能力等等。微軟基於EDM模型釋出了:OData,這裡也可以看出Entity Framework對於NHibernate這樣的ORM的工具不同的戰略考慮。

在PDC大會上,微軟宣布了一個代號為 “Dallas”的社區技術預覽(CTP),由Windows Azure 和SQL Azure構建的資訊服務,能夠讓開發人員與資訊工作者在任何平台上使用優質的第三方資料集和內容。“Dallas”也可以通過使用微軟技術自助的商務智能與分析儲存的資料集。Dallas所使用的資料互動協議就是OData。

在微軟的解決方案中,是用WCF來處理所有程式間的通訊,針對資料通訊,WCF Data Services自然是最好的選擇。首先,WCF Data Services是WCF服務,所以你可以使用所有現有的WCF知識。其次,WCF Data Services已經實現了OData拓撲,於是你可以致力於你的資料格式在你的程式中的表示,而不是AtomPub/JSON這些真正在網路上傳遞的資料格式。再有,WCF Data Services致力於資料轉送,而不是資料存放區。你的資料可以存放在任何位置:本地的資料庫,雲端的資料庫,外部的web services,xml檔案,等等。無論資料是怎麼來的,你都可以用同樣的方式來發布/使用它們。

下面我們就使用WCF Data Service將伺服器的Windows應用程式記錄檔向外發布。我們的應用程式可以把日誌直接就寫在Windows的日誌裡,然後通過使用WCF Data Service非常容易的就將日誌想其他需要的使用者公開。WCF Data Service預設使用的是Entity Framework,使用Entity Framework參看文章WCF Data Service QuickStart,還有一個Reflection Provider,可以支援唯讀資料服務,這個例子就是示範使用Reflection Provider,資料參看MSDN:http://msdn.microsoft.com/en-us/library/dd723653(VS.100).aspx,還可以自訂實現一個Provider,參看文章自訂Data Service Providers。

首先定義一個Windows日誌的實體,類似於WCF的DataContract,這裡使用的是EDM的映射:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Services.Common;
namespace ReflectionDataServiceDemo
{
     [EntityPropertyMappingAttribute("Source",
          SyndicationItemProperty.Title,
          SyndicationTextContentKind.Plaintext, true)]
     [EntityPropertyMapping("Message",
         SyndicationItemProperty.Summary,
         SyndicationTextContentKind.Plaintext, true)]
     [EntityPropertyMapping("TimeGenerated",
         SyndicationItemProperty.Updated,
         SyndicationTextContentKind.Plaintext, true)]
     [DataServiceKey("EventID")]
     public class LogEntry
     {
         public long EventID
         {
             get;
             set;
         }
         public string Category
         {
             get;
             set;
         }
         public string Message
         {
             get;
             set;
         }
         public DateTime TimeGenerateD
         {
             get;
             set;
         }
         public string Source
         {
             get;
             set;
         }
     }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.