在服务器后台保持功能活动

时间:2012-08-04 10:49:34

标签: .net multithreading asp.net-mvc-3 web-services recursion

我正在研究.Net的mvc应用程序,它的一个扩展部分包含一个功能,可以将内容发布到不同的社交网络平台,如Facebook,Twitter等。简而言之它实际上是自动发布的指定间隔后和指定时间后的不同网络。问题是发布部分必须始终在后台匿名运行而不与真实网站的状态有任何关联,因此它可以随时检查时间/间隔和帖子。

目前我的控制器有一个递归函数,在主要部分看起来像下面的代码,但正如在mvc中发生的那样,这个函数通过来自客户端浏览器的url调用获得启动,并且在调用之后浏览器继续等待状态,因为此函数以递归方式运行,直到浏览器在指定的无响应时间后取消请求。

当然这种行为并不理想,所以我想要的是:

  • 使此功能独立,并在后台继续运行 在服务器上不断。
  • 有人告诉我,如果我工作虽然使用WCF(Windows通信基础)使其成为服务等,它会解决我的问题吗?我还没有WCF,但如果可以解决问题,我可以尝试一下。
  • 我能以其他方式实现这个目标吗?

代码:

    while (status == "1")
        {

            if (totalRows > 0)
            {

                for (int i = 1; i < totalRows; i++)
                {
                    myPostArray[i] = myPosts.Tables["myPosts"].Rows[i]["Postmsg"].ToString();
    //…
    //Post to the platform through respected API
    //…

                    System.Threading.Thread.Sleep(3000000000);
                }
                status = true;
            } else if (myPosts.Tables[0].Rows.Count == 0)
            {
                status = false;
            }
            TheRepeater();

1 个答案:

答案 0 :(得分:2)

您确实需要一个单独的服务,它将执行以下操作:

  • 接受来自您的网络应用程序的“启动处理”命令
  • 返回“已确认,将立即开始处理” - 这将结束您的Web应用程序与服务之间的通信,释放通信通道并将控制权返回给Web服务器(而不是超时)
  • 在您的服务中执行后台处理,可能会在周期结束时执行sleep以自动唤醒以进行下一次迭代