2012-06-07 55 views
0

在MVC中對POST使用鎖定是否合理?有沒有像使用會使鎖無效的webfarm的情況?我通常使用數據庫鎖,但是我的特殊情況很難管理,使用Monitor更簡單。我不想討論爲什麼我需要鎖只是想知道是否有情況,當它不會按需要工作。鎖定語句和MVC

private static object Lockable = new Object(); 
public ActionResult Submit() 
{ 
    lock(Lockable) 
    { 


    } 
} 
+0

一個webfarm不會失效鎖,只鎖定了一個本地對象,但我需要的場合使用鎖來進行SMTP郵件。 –

+1

鎖只用於鎖定同一服務器上同一AppDomain中同一進程中的線程。所以其他服務器不受鎖的影響。 我認爲你正在尋找數據庫事務。 Google使用ADO時的SqlTransaction類。在實體框架中,您可以使用TransactionScope來執行此操作。 –

+0

@ C.Zonnenberg我希望不要處理數據庫金屬(通常我會),因爲這有點複雜。雖然我可能不得不。 – Jonathan

回答

3

爲了實現在你需要在網絡上共享資源的webfarm鎖(如緩存服務器),你需要用它來實現webfarm安全鎖。我認爲這是最簡單的解決方案。

你也可以要序列來調用組件和訪問網絡上隔離到它。

有創建MSDTC兼容的組件可以登記到分佈式事務,因此所有呼叫者執行序列化他們的電話的另一種選擇。然而,需要建立所有環境MSDTC工作,企業服務等

1

正如你自己說的,在幾個Web服務器/不同工藝的情況下,你的鎖將只對當前進程,這意味着它不會影響烏拉圭回合應用的其他正在運行的情況下,如果存在此類工作。