【问题标题】:How to Execute Task in BackGround or After Some Condition meets in ASP.NET?在 ASP.NET 中,如何在后台或满足某些条件后执行任务?
【发布时间】:2012-07-05 05:42:30
【问题描述】:

每个搜索数据库都有大约 50 个应用程序变量。来自 Single Search.aspx 页面的总共 50 个搜索 Db 是 querid,具体取决于它连接到特定数据库的 URL 中传递的 QueryString。

例如:if Search.aspx?li=1 然后连接到1SearchDB

if Searcg.aspx?li=2 then Connect to 2SearchDB.....

50SearchDB 我根据 URL 中的 QueryString 维护每个 SearchDB 的总访问者,并增加 GLOBAL.ASAX 文件中的应用程序变量。

在 Global.asax 中:

void Application_Start(object sender, EventArgs e)  
    { 
        // Code that runs on application startup 
        Application["1"] = 0;           
        Application["2"] = 0; 
        . 
        . 
        Application["50"] = 0; 

    } 

在 Search.aspx.cs 的页面加载中:

int LocalBody = Convert.ToInt32(Request.QueryString["li"]); 
public void Page_Load(object sender, EventArgs e) 
    { 
    Label1.Text = GetHits(LocalBody).ToString(); 
    } 


     private int GetHits(int LocalBody) 
        { 
            int counter=0; 
            switch (LocalBody) 
            { 
                case 1: 
                    Application["1"] = (int)Application["1"] + 1; 
                    counter=(int)Application["1"]; 
                    break; 
                case 2: 
                     Application["2"] = (int)Application["2"] + 1; 
                    counter=(int)Application["2"]; 
                    break; 
                . 
                . 
                case 50: 
                    Application["50"] = (int)Application["50"] + 1; 
                    counter=(int)Application["50"]; 
                    break;            default: 
                    break; 
            } 
            return counter; 

        } 

现在,我想将这些应用程序变量添加到 QUEUE 并在达到 1000 或在某些指定的 TIME INTERVAL 说 20 分钟后将值写入 DB 或 Windows 事件日志。

是否编写任何服务或其他...!

【问题讨论】:

  • 您是否将访问者的数量存储在相关数据库中?
  • 是的!我想将它存储在数据库中!但不是在每个用户页面请求之后。我想将它存储在 QUEUE 中,直到它达到 1000 或 20 分钟后,哪个更早。当用户请求页面时,它只需添加到 QUEUE 服务,然后插入所有这些。怎么办?

标签: asp.net wcf global-variables job-scheduling hitcounter


【解决方案1】:

只要 WebApp 在内存中,Application 对象就会一直保留在内存中。如果一段时间内没有请求,IIS 可以关闭 WebApp。在这种情况下,存储在 Application 对象中的值将会丢失。假设即使 IIS 没有关闭 Web 应用程序,该对象仍驻留在站点的内存中。除非您将其持久保存到某个共享位置(例如数据库或消息队列),否则任何外部服务都无法访问此对象。

我的建议是不要使用应用程序对象。而是将其保存到内存存储中。我假设您不想每次更新值时都保存到数据库的原因是为了避免写入磁盘。因此,我建议使用 MSMQ 或 DotNetMQ 之类的消息队列或 Redis 之类的键值存储。

将数据保存在共享位置后,您可以让服务轮询该位置并每 1000 项或每 20 分钟保存一次。

【讨论】:

  • 完全正确!感谢@Amith Georder 提出这么好的建议。我想做同样的事情,即让服务轮询位置并每 1000 个项目或每 20 分钟保存一次。以及如何使用 MSMQ。 & 将这些项目写入数据库?
猜你喜欢
  • 2019-09-02
  • 2013-09-09
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2021-12-30
  • 2018-06-01
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多