Beispiel #1
0
    public static void SendMail(MoveRecInfo info)
    {
        // 为了演示简单,这里就不发邮件了,直接写文件。

        string mailBody = info.Reason + "\r\n操作时间:" + DateTime.Now.ToString() + "\r\n\r\n\r\n";
        // 为了便于验证这个方法的调用次数,写文件时,并不覆盖,而是追加内容。
        string filePath = Path.Combine(WebSiteApp.AppDataPath, info.RowGuid + ".txt");

        File.AppendAllText(filePath, mailBody, System.Text.Encoding.UTF8);
    }
Beispiel #2
0
    private void MoveRecInfoRemovedCallback(string key, object value, CacheItemRemovedReason reason)
    {
        if (reason == CacheItemRemovedReason.Removed)
        {
            return;                     // 忽略后续调用HttpRuntime.Cache.Insert()所触发的操作
        }
        // 能运行到这里,就表示是肯定是缓存过期了。
        // 换句话说就是:用户2分钟再也没操作过了。

        // 从参数value取回操作信息
        MoveRecInfo info = (MoveRecInfo)value;

        // 这里可以对info做其它的处理。

        // 最后发一次邮件。整个延迟发邮件的过程就处理完了。
        MailSender.SendMail(info);
    }
Beispiel #3
0
    public int MoveRec(MoveRecInfo info)
    {
        // 这里就不验证从客户端传入的参数了。实际开发中这个是必须的。

        // 先来调整记录的顺序,示例程序没有数据库,就用Cache来代替。
        int sequence = 0;

        int.TryParse(HttpRuntime.Cache[info.RowGuid] as string, out sequence);
        // 简单地示例一下调整顺序。
        sequence += info.Direction;
        HttpRuntime.Cache[info.RowGuid] = sequence.ToString();


        string key = info.RowGuid + "_DelaySendMail";

        // 这里我不直接发邮件,而是把这个信息放入Cache中,并设置2秒的滑过过期时间,并指定移除通知委托
        // 将操作信息放在缓存,并且以覆盖形式放入,这样便可以实现保存最后状态。
        // 注意:这里我用Insert方法。
        HttpRuntime.Cache.Insert(key, info, null, Cache.NoAbsoluteExpiration,
                                 TimeSpan.FromMinutes(2.0), CacheItemPriority.NotRemovable, MoveRecInfoRemovedCallback);

        return(sequence);
    }