2012-08-04 59 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