2012-05-27 93 views
1

現在,我有一個ASP.NET MVC應用程序。我在ASP.NET MVC應用程序中從外部Windows桌面(不是我的)應用程序(通過TCP/IP)檢索數據的幾個方法。現在我想將這些方法移到外部服務(程序),還有其他方法(發送電子郵件消息和其他處理,現在在單獨的線程中運行)。這是我第一次使用Web服務/ wcf。而且,有什麼更好的方式來做到這一點:wcf,web服務,贏得服務?
感謝什麼是我的任務的最佳選擇(wcf,web服務,win服務)

更多細節:
在ASP.NET MVC應用程序,我得到來自外部的桌面(我的)應用程序(通過TCP/IP)的各種信息。例如在這個程序中創建事件:電影,體育,劇院和時間表。另外,還有多少個座位留給特定的會議等等。
不同類型的信息可以通過各種方式獲得。有時,我會每分鐘檢查一次是否有更新(事件列表,shedules)。有時我需要每分鐘獲取其他信息以便進行更改(會話剩餘多少個席位)。因此,我有許多任務是在一個單獨的線程和方法中執行的,如下所述。

對於使用下面的方法,我從外部雙贏程序更新:

protected void Application_Start() 
{ 
    AddTask("UpdateFromExternalProgram", "60", 60); 
} 

private static CacheItemRemovedCallback _onCacheRemove = null; 
public static void AddTask(string name, string value,int seconds) 
{ 
    _onCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); 
    HttpRuntime.Cache.Insert(name, value, null, 
         DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, 
         CacheItemPriority.NotRemovable, _onCacheRemove); 
} 

    private static void CacheItemRemoved(string key, object value, CacheItemRemovedReason reason) 
    { 
     if (reason == CacheItemRemovedReason.Expired) 
     {    
       AddTask(key, value.ToString(), Convert.ToInt32(value)); 
       GetUpdatesFromExternalProgram();    
     } 
    } 
private static void GetUpdatesFromPremiera() 
{ 
    //creates TCP/IP client, send request, and parse response 
} 

而且,在一個單獨的線程發送現場(登記,反饋等信息)的所有電子郵件:

ThreadPool.QueueUserWorkItem(new WaitCallback(SendEmailInSeparateThread), senderInfo); 

而且,我想將這個功能轉移到其他應用程序中:wcf,web服務或win服務。

回答

2

您應該在ASP.NET應用程序中使用avoid implementing recurring background tasks。 Windows服務是實現此功能的更好選擇。

+0

爲什麼windows服務不是web服務?什麼是prons和cons? – user1260827

+0

它將取決於Web服務類型。但是,如果您在IIS(經典ASMX或IIS託管的WCF服務)中託管此Web服務,則您正在使用ASP.NET應用程序。在這種情況下閱讀Phil Haack文章,爲什麼在ASP.NET應用程序中實現循環後臺任務很糟糕。在任何時候,IIS都可以回收這個ASP.NET應用程序,停止所有活動並殺死所有線程。 –

相關問題