2012-08-04 58 views
0

我工作过的.Net一个MVC应用程序在服务器上,它的一个延伸部分包含张贴的事情不同的社交网络平台,如Facebook的功能,微博等,简而言之它所做的是实际上在指定的时间间隔和指定的时间之后自动发布到不同的网络上。问题在于发布部分必须始终在后台匿名运行,而不与任何真实网站的状态有任何关联,因此可以随时检查时间/间隔和帖子。保持功能活跃在后台

目前我的控制器有一个递归函数,主要部分看起来像下面的代码,但就像它发生在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(); 
+0

我会争辩说,这样的事情是不适合的Web应用程序.. – 2012-08-04 10:52:13

+0

@Simon怀特黑德:你有什么建议作为替代?这个功能并不需要成为网络应用程序的一部分..它也可以运行完全分开... – Maven 2012-08-04 11:05:18

回答

2

你确实需要为这个单独的服务,这将做到以下几点:

  • 从你的web应用
  • 接受 “开始处理” 命令
  • 返回“已确认,将立即开始处理” - 这将结束您的Web应用程序和服务之间的通信,释放通信离子通道和返回控制返回到Web服务器(而不是超时)
  • 做背景处理您的服务,可能做了sleep在一个周期自动唤醒结束对下一次迭代
+0

Thankyou回复..但在我的理解在一个mvc应用程序'承认,将开始处理现在'命令可以通过从一个函数返回一些东西,很可能是一个视图返回,并且在函数调用返回后,这意味着它已经完成执行,它如何保持自己运行? – Maven 2012-08-04 11:04:04

+0

@Maven - 因为它是一个独立的线程在服务中运行!服务中的Web服务器仅启动它,并在HTTP响应中获得已启动的确认。服务线程然后在循环中处理你的东西。 – 2012-08-04 11:43:45

+0

马丁是正确的 - 你可以自由地返回'ACK'只要你高兴,这并不让你的代码“失去焦点”或被杀 – YePhIcK 2012-08-04 17:49:20