使用OData协议查询Windows日志

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;
         }
     }
}

时间: 2024-12-30 18:19:27

使用OData协议查询Windows日志的相关文章

使用Evtsys把Windows日志转换为SYSLOG

我们知道,无论是Unix.Linux.FreeBSD.Ubuntu,还是路由器.交换机,都会产生大量的日志,而这些,一般会以syslog的形式存在.调试过防火墙.入侵检测.安全审计等产品的朋友应该对SYSLOG熟悉,如果您还不了解SYSLOG,请登录百度或Google查询. 很多时候,我们需要对日志进行集中化管理,如各种操作系统.网络设备.安全设备,甚至应用系统.业务系统等,但是不知道你注意看上文了没:Windows的应用.安全.系统日志怎么办? Windows操作系统本身是可以产生很多日志的,

WCF Data Service使用总结 (一)了解OData协议

最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的框架.可以很方便地通HTTP来访问数据库,如果你是做富客户端开发的,用它绝对能大大减少你的工作量.出于对这个框架的喜爱,于是把自己的一些使用经验写下来,并且希望有更多的人能够用上. OData简介 说起 WCF Data Service ,不得不说的是 OData.对于一个标准的 Web 服务,它往

渗透技巧——Windows日志的删除与绕过

本文讲的是渗透技巧--Windows日志的删除与绕过, 0x00 前言 在渗透测试过程中,Windows日志往往会记录系统上的敏感操作,如添加用户,远程登录执行等. 对于一次完整的渗透测试,通常会选择对Windows日志进行清除和绕过,而对于防御者来说,了解常用的绕过方法也有助于更好的保护自己的系统. 所以本文将要介绍常见的Windows日志清除与绕过方法,分享经验,帮助大家. 0x01 简介 本文将要介绍以下内容: Windows日志的常用清除方法 Windows日志的两种绕过方法 0x02

c#.NET中日志信息写入Windows日志中解决方案_C#教程

1. 目的   应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.  在Windows2000及以上操作系统中,有一个Windows日志系统,它包括应用程序(Application)事件日志.系统(System)日志和安全(Security)日志,事件日志也可以是自定义日志.在.net Framework中也提供了相应的类和接口来使用应用程序事件日志或者自定义事件日志

zt:用Syslog 记录UNIX和Windows日志的方法

http://www.chinalinuxpub.com/read.php?wid=1720 在比较大规模的网络应用或者对安全有一定要求的应用中,通常需要对系统的日志进行记录分类并审核,默认情况下,每个系统会在本地硬盘上记录自己的日志,这样虽然也能有日志记录,但是有很多缺点:首先是管理不便,当服务器数量比较多的时候,登陆每台服务器去管理分析日志会十分不便,其次是安全问题,一旦有入侵者登陆系统,他可以轻松的删除所有日志,系统安全分析人员不能得到任何入侵信息.因此,在网络中安排一台专用的日志服务器来

如何构建windows日志收集服务器

以前我在讲MCITP课程时,经常会提到事件日志查看这项Windows 产品自带的功能,但是总感觉如果企业规模小,服务器数量少的话,那么管理员登录到每台服务器查看报错日志还可以,但是当我在运维过程中发现随着服务器数量的不断增加,管理员再去一台一台登录服务器查看相关报错日志,可能就有些不便了,那么有没有一种更好地办法能让管理员登录一台服务器就可以查看到所有服务器的日志报错呢? 其实办法还是有的,但是在提解决办法前呢,还是不得不说一说Windows 事件日志,在Windows server 2008

Oracle技术:使用Oracle的外部表查询警告日志文件

从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问. 对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件. 以下一个例子用来说明外部表的用途. 首先需要创建一个Directory: [oracle@jumper oracle]$ sqlplus "/ as sysdba"

几种常见的Windows日志转SYSLOG工具的使用方法

随着信息技术的高速发展,网络中的设备越来越多的,渐渐的我们发现依赖传统手段去一台台分析设备(路由器.交换机.防火墙.服务器.数据库.中间件等)的日志已经严重影响了我们的工作效率,并无法对业务系统的可用性提供保障.总是在问题出现之后才充当救火员的角色.所以,是时候对运维日志进行集中管理了. 关键词:syslog 日志管理 如第一段文字所说,运维日志有很多种,今天我们先说如何进行Windows日志的发送,毕竟这个毕竟容易下手--游侠会在近期撰写服务端的一些文字. Windows操作系统本身是可以产生

Win7系统中查看Windows日志的方法

  Win7系统中查看Windows日志的方法          Windows日志位于计算机管理的事件查看器中,用于存储来自旧版应用程序的事件以及适用于整个系统的事件. Win7系统的Windows日志包括五个类别,分别为应用程序日志.安全日志.系统日志.安装程序日志和转发事件日志. 应用程序日志包含由应用程序记录的事件;安全日志包含系统的登录.文件资源的使用以及与系统安全相关的事件;系统日志包含 Windows 系统组件记录的事件;安装程序日志包含与应用程序安装有关的事件;转发事件日志用于存