Microsoft . 技术之路...

—— 专注于微软技术, 分享是快乐的源泉......
posts - 183, comments - 14, trackbacks - 7, articles - 100
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2011年4月27日

  • 下载StreamInsight试用版(大小大约是14MB),安装到机器上。安装的时候,实例名栏目输入Default。你不需要安装任何的SQL Server实例;
  • 打开Microsoft StreamInsight程序组,点击StreamInsight Samples,下载例子代码并展开;
  • 启动Visual Studio 2008或者2010,打开StreamInsightProductTeamSamples\Applications\ComposingQueries\ ComposingQueries.sln;
  • 打开成功以后,按F7编译,然后Ctrl+F5就可以运行了。
  • 更多的知识,请参考Microsoft StreamInsight程序组里面提供的文档或者查阅无联网。

    参考资料

    1. SQL Server 2008 R2数字之旅,http://www.microsoft.com/sqlserver/tour/zh/cn/videos/stream-insight-complex-event-processing.aspx
    2. 下载StreamInsight试用版, http://www.microsoft.com/downloads/details.aspx?FamilyId=54ad6107-c552-4d47-b1a1-3f66460f71a9&displaylang=zh-cn
    3. SQL Server 2008 R2 StreamInsight, http://www.microsoft.com/sqlserver/2008/en/us/R2-complex-event.aspx
    4. LINQ, http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
    StreamInsight 硬件和软件要求

    StreamInsight 具有以下硬件要求:

    • 建议:2.2 GHz 或更高频率 CPU,1024 MB 或更大容量 RAM
    • 最低:1.6 GHz CPU、384 MB RAM

    以下操作系统支持 StreamInsight:

    • Windows XP Service Pack 2 或更高版本(x86 和 x64)
    • Windows Server 2003 Service Pack 2 或更高版本(x86 和 x64)
    • Windows Server 2003 R2 或更高版本(x86 和 x64)
    • Windows Vista(x86 和 x64)
    • Windows Server 2008 或更高版本(x86 和 x64)
    • Windows 7(x86 和 x64)

    系统环境要求条件:

    • 具有计算机上的管理权限。
    • 安装了 Microsoft .NET Framework 3.5 Service Pack 1(完整程序包)。(不支持 Microsoft .NET Compact Framework。)
    • 删除了 StreamInsight 的较早安装版本。
    • 删除了 Microsoft SQL Server Compact 的安装。
    • 若要安装 StreamInsight Server (StreamInsight.msi),您必须具有有效的 Microsoft SQL Server 2008 R2 产品密钥。该产品密钥确定可用于StreamInsight 的可伸缩容量(该容量又确定每秒事件速率)。请注意,与产品密钥相关联的 SQL Server 2008 R2 实例无需安装在计算机上。
     

    posted @ 2011-04-27 14:24 赣江源 阅读(59) 评论(0) 编辑

    Microsoft StreamInsight 是一个功能强大的平台,可用于开发和部署复杂事件处理 (CEP) 应用程序。它具有高吞吐流处理体系结构和基于 Microsoft .NET Framework 的开发平台,可帮助您迅速实现强大而高效的事件处理应用程序。事件流源通常包括来自生产应用程序、财贸应用程序、Web 分析以及运营分析的数据。通过使用 StreamInsight,您开发出的 CEP 应用程序可降低提取、分析和整理数据的成本,还可让您即时监控和管理数据,挖掘数据中的条件、机遇和缺陷,进而从那些原始数据中获得直接业务价值。

    Microsoft StreamInsight 为开发和部署复杂事件处理 (CEP) 应用程序提供一个功能强大的平台。CEP
    是一种高吞吐、低滞后处理事件流的技术。典型的事件流源包括来自生产应用程序、财贸应用程序、Web 分析或运营分析的数据。StreamInsight
    流处理体系结构和熟悉的基于 .NET 的开发平台使开发人员可以快速实现强大而高效的事件处理应用程序。

    StreamInsight 具有下列主要优点:

    • 高度优化的性能和数据吞吐量
      StreamInsight
      实现了轻量级流式体系结构,可支持对高速数据高度并行执行连续查询。使用内存中缓存和增量结果计算,可带来高数据吞吐、低滞后时间的卓越性能。因为在关键处理路径中无需进行数据加载或存储操作,所以可实现低滞后时间。借助
      StreamInsight,所有处理都由传入事件自动触发。特别地,应用程序无须为事件轮询付出任何开销。此平台提供了无序事件处理功能。此外,可以访问静态引用或历史数据,这些内容包括在低滞后时间分析中。
    • .NET 开发环境
      开发人员可以使用 Microsoft 的 .NET 语言(如 Visual C#)来编写 CEP
      应用程序,从而利用高级语言平台 LINQ(Language Integrated
      Query,语言集成查询)作为嵌入式查询语言。如果庞大的开发人员社区都已经熟悉了这些技术,则此功能将降低从应用程序开发到生产整个过程中所需的开发成本和时间。在当前版本中,StreamInsight
      只支持 C# 作为宿主语言。
      使用 LINQ,熟悉 SQL
      的开发人员可以很快以声明方式编写查询,将来自多个流的数据处理并关联到有意义的结果中。StreamInsight
      服务器中的优化器和计划程序相继确保优化查询性能。
    • 灵活的开发功能
      StreamInsight 支持三种部署方案:
      • 作为托管(嵌入式)DLL 完全集成到应用程序中。
      • 作为一台拥有多个应用程序和共享该服务器的用户的独立服务器。在其独立配置中,StreamInsight
        服务器在一个包装(如可执行文件)中运行,也可以将服务器打包为一项 Windows 服务。
      • 托管或独立 StreamInsight 服务器可作为服务器场的一部分。
    • 可管理性
      • StreamInsight 服务器中内置了监控和可管理性功能,支持 CEP 应用程序低总拥有成本 (TCO)。StreamInsight
        服务器中提供的管理界面和诊断视图允许管理员监控和管理 CEP 应用程序。可管理性框架也允许 ISV 和系统集成商在生产以及其他扩展安装中远程监控和支持
        StreamInsight 部署的系统。
      • StreamInsight 提供独立的事件流调试程序,可用来分析、诊断和排查 StreamInsight
        中使用的查询。

    CEP 方案

    在下列业务情形中,通常需要高吞吐、低滞后地处理事件流:

    • 生产过程监视和控制
    • 点击流分析
    • 金融分析
    • 电力设施
    • 健康保健
    • IT 监视
    • 物流管理
    • 电信业

    下面讨论一些情形,并探讨其对于事件处理的要求。

    生产过程监视和控制

    为确保产品和过程在最优状态下运行,停机的时间最少,制造类公司需要低滞后地收集和分析车间设备和传感器数据。通常的生产情形包括下列需求:

    • 基于资产监视和聚合机器的“出生”数据。
    • 基于传感器观察车间的活动和输出。
    • 观察并通过设备控制器作出反应。
    • 能够每秒处理多达 10,000 个数据事件。
    • 发生不良状况的瞬间生成事件和警报。
    • 对关键设备进行前瞻性的基于状况的维护。
    • 低滞后分析聚合的数据(开窗和日志尺度)。

    点击流分析

    来自商业网站的优化客户体验要求低滞后处理用户在网站上的行为和交互。通常的点击流分析应用程序包括下列要求:

    • 能够基于低滞后点击流分析驱动页布局、导航和呈现。
    • 在高峰时段能够每秒处理多达 100,000 个数据事件。
    • 即刻点击流模式检测并用针对性广告来响应。

    金融服务环境中的算法交易

    算法交易需要进行大量数据处理,因此通常具有下列需求:

    • 能够每秒处理多达 100,000 个数据事件。
    • 时间紧迫的查询处理
    • 监控和投资目前市场上可能机会转瞬即逝的情形。
    • 智能过滤输入数据。
    • 能够随着多个数据源和时间定义模式以自动为资产组合触发买进/抛售/持有决策。

    电力设施

    设施传感器需要高效的基础结构来管理电网和其他设备。这些系统通常具有下列要求:

    • 即刻响应能源或水资源消耗变化,最大限度降低或避免断电或其他服务事故。
    • 通过向智能电网转移获得运营和环境效益。
    • 电网沿线多层次聚合。
    • 能够每秒处理来自上百万个数据源的多达 100,000 个事件。

    posted @ 2011-04-27 14:08 赣江源 阅读(53) 评论(0) 编辑

    2009年11月17日

    在用gridview做数据呈现的时候,很多时候需要用到DataFormatString属性,但是在使用的时候发现绑定上去后并没有做到格式化,和原来DataGrid时候的设置是相同的,为什么到这里就不行了呢,而在老版本的DataGrid中执行就没有问题,后来发现是因为gridview中绑定列做格式化是需要设置列的属性HTMLEncode="False",这样DataFormatString才能生效。
    <ASP:GridView ID="grvResult" runat="server" AutoGenerateColumns="False" Width="100%">
        <Columns>
            <ASP:BoundField HeaderText="发布日期" DataField="releaseDate" DataFormatString="{0:yyyy-MM-dd}" HTMLEncode="False">
            </ASP:BoundField>     
            <asp:BoundField DataField="state" HeaderText="状态" HtmlEncode="false" DataFormatString="&lt;img src='images/state_{0}.gif'&gt;&lt;br&gt;&lt;hr size=1 color=#eae6e8&gt;">
            </asp:BoundField>
            <asp:HyperLinkField DataNavigateUrlFields="id" DataNavigateUrlFormatString="view.aspx?id={0}"  DataTextField="caption" HeaderText="标题" DataTextFormatString="{0}&lt;br&gt;&lt;hr size=1 color=#eae6e8&gt;">
            </asp:HyperLinkField>
        </Columns>
    </ASP:GridView>

    例如上面的代码展示了时间和样式绑定方式。DataFormatString中的{0}是固定的格式,这和String.Fromat(“{0}”, someString)中的{0}是一个用法,表示绑定上下文的参数索引编号。然后,在后面加入格式化字符串,具体的使用方法可以参考MSDN。

    这里需要注意以下几点
    1. 在GridView中的ASP:BoundField使用DataFormatString必须设置属性HTMLEncode="False",否则不起作用。
    2. 如果需要使用日期类型的格式化字符串,必须数据实体中对应的字段也应该日起类型的。
    3. 格式化字符串C代表货币单位,需要绑定的数据类型应该是数字类型的。如果是字符串类型的不起作用,需要手动添加格式化字符串为DataFormatString="¥{0:C}"。

    总结:
         GridView中使用DataFromatString与在DataGrid中使用起来有些不同的!在GridView中的BoundField新增了HTMLEncode 属性,且默认是true,这就使得DataFromatString失效!

    posted @ 2009-11-17 23:37 赣江源 阅读(468) 评论(0) 编辑

    2009年10月31日

    今天搞的非常郁闷,公司有个MM不小心误操作了一把,数据库中的其中一个数据明细表给删除了,更倒霉的是查看备份文件时,看到自动备份的最后文件竟然是2天前的,要吐血了,一看原因,这个MM竟然说2天前服务器重启动了一下,SQL Server Agent没有设置成自动启动,也没有手工启动,真是无语呀,差点酿成大祸,这可是客户的生产数据库呀,,马上搜索记忆,以前在微软培训的时候知道可以根据日志文件按照时间点来还原数据库的数据,有点像windows的系统还原功能,呵呵,但是以前一直都没有实践操作过,赶紧上微软网站查找资料,找到后立马操作一把,还真是不负期望还原回去了,特发贴共享一下,给同样经历的朋友们一个参考吧。

    特别提醒:在操作前记得把数据库备份一下。

    注:我的最后备份文件是20091029的15点,刚好差距是2天时间。

    第一步:备份日志文件,以备还原使用,代码如下:

    BACKUP LOG 数据库名 TO DISK='备份文件存放路径(如:D:\test.log)' WITH INIT

    第二步:恢复备份的最后一个数据文件备份,记得写上WITH NORECOVERY,如果是在管理工具中操作还原数据库的话,请在[还原数据库]->[选项]->[恢复完成状态]下选择[是数据库不再运行,但能还原其它事务日志]选项,再确定,还原时数据库可以重命名,代码操作如下:
    RESTORE DATABASE test_bak from disk='F:\databak\test_db_200910291500.BAK' WITH NORECOVERY

    第三步:根据日志文件指定恢复的时间点数据,如下:
    RESTORE LOG sms_01_bak FROM disk='f:\sms_01.logs' WITH RECOVERY,STOPAT='10/31/2009 15:40'

    运行完成后,把数据库设置成可运行状态,查询数据,OK,全部都在,高兴啊~~~~~~ 

     

    如果感觉日志文件太大了,可以清空日志信息,记得把刚才备份的日志文件保存好,

    清空日志:
    DUMP  TRANSACTION  sms_01  WITH  NO_LOG  

    posted @ 2009-10-31 18:28 赣江源 阅读(385) 评论(0) 编辑

    2009年4月12日

    实现原理

    在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次访问aspx文件都会触发。但是Application_BeginRequest中不能对已经经过FROMS身份验证的身份ticket票进行识别。所以只能放到Application_AuthenticateRequest中去。
    实现原理是:每次访问aspx文件时候都会判断在线表里面是否有这个用户(已经登录了的记录用户名,没有登录的记录IP地址),如果不存在,则将该用户的身份、最后访问时间、最后访问IP、和最后访问的URL存入数据库。如果数据库中已经曾在,则更新该记录,把最后访问时间,IP以及最后访问URL更新。
    同时,删除数据库中与当前时间间隔20分钟以上的数据(20分钟没操作当为超时)。
    这样,你不仅仅可以看到当前在线的准确人数,还知道是那些人在线,以及是否登陆,和访问人数中已经是会员的比例,以及所在位置,并计算某个页上的人数。

    字段 类型 长度 说明
    user_serial int 40 序号
    user_name varchar 200 用户名(没登陆则为IP)
    user_company varchar 1000 公司名(没登陆则为'游客')
    user_ip varchar 200 IP地址
    user_date datetime 80 最后操作时间
    user_url varchar 1000 最后操作页面路径

    注意:
    1、程序位于global.asax中
    2、使用的FORMS身份验证
    3、请使用 System.Web.Security

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
    string strUserID = string.Empty;
    string strCompany = string.Empty;
    if (Request.IsAuthenticated)
    {
    FormsIdentity identity = (FormsIdentity)User.Identity;
    FormsAuthenticationTicket ticket = identity.Ticket;
    strUserID = User.Identity.Name;
    strCompany = ticket.UserData.Split("|".ToCharArray())[2];
    }
    else
    {
    strUserID = Request.UserHostAddress;
    strCompany = "游客";
    }
    MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany);
    MemberAccount account = new MemberAccount();
    if (!account.CheckUserOnline(strUserID))
    account.AddOnline(objOnline);
    else
    account.UpdateOnline(objOnline);
    //删除超时的会员
    account.DeleteOnline();
    }

    posted @ 2009-04-12 15:17 赣江源 阅读(261) 评论(0) 编辑

    2008年4月15日

        在ASP.NET程序的权限设计中,遇到了一个问题,需要每个页面都调用一个公用的函数,改函数需要

    在每一个页面执行的时候,自动检查使用者是否有该页面的使用权限,并且需要取得该页面上相关功能权

    限,并回传该页面的Title对它作修改;还需要保存使用的访问记录方便查询。
        1、用什么方式,能够在编写ASPX的时候用最少的代码可以实现这一功能;
        2、用什么方式调用公用的函数,更方便处理;
        针对这些问题,第一个想到的就是ASP2.0中的MasterPage功能,因为在asp.net2.0下基本上都会使用

    到MasterPage,在MasterPage的PageLoad事件中来处理用户权限的问题,这样每个页面引用MasterPage就

    能够使用了;但是经过测试后发现,MasterPage的PageLoad事件竟然是发生在ContentPage的PageLoad之

    后的,这就意味着这样做,使Content Page就无法在PageLoad事件中调用公用的函数。
        在使用过程中发现当新增aspx并使用CodeFile方式时,可以看到在CodeFile的CS文件中有这样的内容

    ,如下:
    public partial class Default : System.Web.UI.Page
    {
    }
    其中该Class继承了System.Web.UI.Page,这样我们就可以写一个Class来代替System.Web.UI.Page;这里

    我们来创建一个这样的类。
    1、首先在解决方案项目上按右鍵→加入新项→选择模板[类]→名称[PageBase.cs],如果你还没有启用

    App_Code的文件夹,系统提示是否新增App_Code,并将该文件放入文件夹中,确定后,会在App_Code中增

    加PageBase.cs文件,内容如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    /// <summary>
    /// Summary description for PageBase
    /// </summary>
    public class PageBase
    {
        public PageBase()
        {
            //
            // TODO: Add constructor logic here
            //
        }
    }
    2、接下来让PageBase继承System.Web.UI.Page,如下:
    public class PageBase : System.Web.UI.Page
    这样就可以使用page的相关事件了。
    3、下一步添加一些函数和属性,用来测试这些方法,代码如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    /// <summary>
    /// Summary description for PageBase
    /// </summary>
    public class PageBase : System.Web.UI.Page
    {
        Boolean _IsBrwP = false;

        public PageBase()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public string SayHello(string inStr)
        {
            return "Hello, " + inStr;
        }

        public Boolean BrwP
        {
            get { return _IsBrwP; }
            set { _IsBrwP = value; }
        }

        public void ChkBrwP(string UID)
        {
            if (UID == "li")
            {
                BrwP = true;
            }
            else
            {
                BrwP = false;
            }
        }

        private void Page_Load(object sender, EventArgs e)
        {
            Response.Write("PageBase Load.<br>");
        }
    }
    4、新增一个aspx页面文件,用来测试PageBase,如下:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Button ID="btn1" runat="server" Text="设定UID为li" OnClick="btn1_Click" /><br />
                <asp:Button ID="btn2" runat="server" Text="设定UID为liu" OnClick="btn2_Click" /></div>
        </form>
    </body>
    </html>
    5、修改Default2.aspx.cs文件,把原本默认继承System.Web.UI.Page改为继承PageBase,如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class Default2 : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string sUid = Request.QueryString["UID"];
            string sRc = this.SayHello(sUid);
            Response.Write("Default2.aspx Load.<br>");
            Response.Write(sRc + "<br>");
            this.ChkBrwP(sUid);
            Response.Write(this.BrwP.ToString());
        }
        protected void btn1_Click(object sender, EventArgs e)
        {
            Response.Redirect("default2.aspx?UID=li");
        }
        protected void btn2_Click(object sender, EventArgs e)
        {
            Response.Redirect("default2.aspx?UID=liu");
        }
    }
    6、按F5运行看测试结果。
    从运行结果可以看出,PageBase的Page_Load事件在Default2.aspx的Page_Load之前,并且也可以通过this.的方式弹出PageBase定义的函数和属性进行选用。因此一些在页面Load之前要执行的公用函数代码,就可以通过这样的方式来处理。

     

    posted @ 2008-04-15 08:34 赣江源 阅读(1138) 评论(0) 编辑

    2008年4月9日

    摘要: 当我们开发了不同的Web应用系统后,如果一个用户同时要使用多个Web应用系统,但是每个应用系统都需要输入自己的账号和密码,这对于用户来说太麻烦。为了方便用户使用,就需要做单点登录,只要登陆一个Web系统后,跳转到别的Web系统时不再需要输入账号和密码;但是为了考虑到系统的安全性,这样设计单点登录功能时需要考虑安全和易用性的兼顾。下面的实现方式是通过SQL-Server数据库来实现,假如有两个Web...阅读全文

    posted @ 2008-04-09 10:50 赣江源 阅读(652) 评论(0) 编辑

    摘要: 在ASP.NET开发中经常会使用到Web控件和HTML控件,如果想通过代码提取这些控件Render到客户端后生成的HTML样式的话可以通过如下的函数得到。1publicstringRenderHTML(WebControlobjWebCtrl)2{3try4{5System.IO.StringWritersw=newSystem.IO.StringWriter();6HtmlTextWriterh...阅读全文

    posted @ 2008-04-09 09:59 赣江源 阅读(533) 评论(0) 编辑

    摘要: 近期将IE升级为IE7后发现原来开发的程序会出现很多问题,其中有一个就是程序中的“关闭”窗口按钮空能,当IE7有多个选项卡打开后要关闭IE时会提示“是否关闭所有选项卡”的提示,以前的IE版本是没有这个功能提示的,经过多方查找和试验后发现如果要用程序控制关闭IE7时不出现这个提示的话需要多OPEN的时候作一个小小的处理。IE6环境下的代码如下:wind...阅读全文

    posted @ 2008-04-09 09:38 赣江源 阅读(1420) 评论(0) 编辑

    2008年1月10日

    摘要: 在 ASP.NET AJAX 机制下,使用 UpdatePanel 控件有很好的用户体验,它可以让开发人员不用编写繁杂的 javascipt相关程序代码,就能享有 AJAX 的效果。一般包含在 UpdatePanel 中的子控件,如果子控件有执行 PostBack 操作时,UpdatePanel 的机制在前端会拦截 __doPostBack 操作,使得控件产生的 PostBack 都会经由 Upd...阅读全文

    posted @ 2008-01-10 09:08 赣江源 阅读(686) 评论(1) 编辑