快速业务通道

耗时很长的服务器端事件中让客户端得到中间过程信息的更合理的解决方案

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

耗时很长的服务器端事件中让客户端得到中间过程信息的更合理的解决方案

我认为《耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案》一文中的解决方案不合理,属于技术的误用,满篇的ajax这个词很容易给读者造成误导 。

原需求:

B/S结构的系统里,用户点一个按钮系统开始发送上千封邮件,要求把发送信息(发送成功数,失败数,剩余数量...)动态实时的反馈给客户.

原文的技术误用之处:

(1)ajax,pageload 这些ui层的东东渗透到逻辑层里去了

(2)thread的职责太多

并不是网页上的多线程不好搞,而是Web开发搞久了,基本的OO设计能力下降了,或者根本就忽略OO设计了,眼中只有页面。

以原文这个例子而言,你不把它当成Web开发,一切就变得很简单了。

我的解决方案:

首先,得有一个类管理每条信息。

  public abstract class MessageHolder
  {
    public DateTime SendTime { get; set; }
    public String ReceiverMail { get { return Receiver.Mail; } }
    public String ErrorMessage { get; set; }
    public Int32 SendCount { get; set; }
    public Boolean SendExpired { get { return SendCount > 5; } }
    public Boolean SendOk { get; private set; }
    public Guid Id { get; private set; }
    public String SendResult {
      get {
        if (SendOk) return "发送成功";
        else
        {
          if (SendExpired) return "发送失败";
          else return "等待发送";
        }
      }
    }
    
  }
  
  public class MailMessageHolder : MessageHolder
  {
    public String Title { get; private set; }
    public String Text { get; private set; }
    
  }

然后,得有一个容器管理用户的发送信息

  public class MessageCache<TMessageHolder> where TMessageHolder : MessageHolder
  {
    protected SortedDictionary<String, IList<TMessageHolder>> Cache { get; set; }  // Cache(ReceiverMail, MsgHolders),我的程序主要

功能不是群发邮件,所以这样设计
  
    public MessageCache()
    {
      Cache = new SortedDictionary<string, IList<TMessageHolder>>();
    }
  
    public void Add(TMessageHolder msgHolder)
    {
      
    }
    
    public IList<TMessageHolder> GetAllMessage()
    {
      
    }
  
    public IList<TMessageHolder> GetAllMessageByReceiver(String receiverMail)
    {
      
    }
  
    public IList<TMessageHolder> FindNeedToSendMessageHolders(IList<TMessageHolder> holderList)
    {
      if (holderList == null) return null;
      IList<TMessageHolder> hl = new List<TMessageHolder>();
      foreach (TMessageHolder h in holderList)
      {
        if ((!h.SendExpired) && (!h.SendOk)) hl.Add(h);
      }
      return hl;
    }
  
    public IList<TMessageHolder> FindSendOkMessageHolders(IList<TMessageHolder> holderList)
    {
      
    }
  }

最后,得有线程发送

    public void Th

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号