2012-07-13 51 views
2

我對.NET中SqlDependency的用法有一個疑問。我已經閱讀過文檔,但是OnChange事件是否在自己的線程中被調用,我還不清楚。舉例來說,如果我得到30個併發事件,他們每個人都得到他們自己的OnChange甚至處理程序?我問的原因是,如果OnChange處理程序正在完成的工作阻塞下一個事件,我不想用此創建引擎。C#.NET SqlDependency

例如,我有一個訂單數據庫的SqlDependency,每次有新的訂單,我收到OnChange事件,然後我可以處理用戶的訂單。這不會阻止其他人進來,對嗎?

另外,你看到使用這種方法的任何問題? SqlDependency看起來像一個非常強大的功能,所以我希望它能以這種方式工作。 )

由於

回答

4

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

根據在上面的鏈路上的SQLDependancy類的MSDN信息的註釋, - 經濟通>

"The OnChange event may be generated on a different thread from 
the thread that initiated command execution. " 

在另一方面,在相同的頁面是下面的註釋,報價 - >

"SqlDependency was designed to be used in ASP.NET or middle-tier 
services where there is a relatively small number of servers 
having dependencies active against the database. It was not 
designed for use in client applications, where hundreds or 
thousands of client computers would have SqlDependency 
objects set up for a single database server. " 
+0

再次,非常模糊的信息。 「可能會在不同的線程中生成」並不完全回答我的問題。至於第二部分,正如你從我的問題的例子中看到的那樣,這是一箇中間層(接受客戶訂單)。那麼,這會阻止其他事件嗎?還是會在自己的線程中處理所有併發事件? – u84six 2012-07-13 15:55:21

+0

另外,其他中型網站如何處理這些類型的事務,您需要對更新採取措施,然後將數據處理到另一個數據庫,哪裏有錯誤並需要重新處理? – u84six 2012-07-13 15:55:45

+0

我目前有一個Windows服務在數據庫機器上運行,在Orders數據庫上有一個sqldependency,並且對於每個插入,我正在處理和分派數據到另一個服務器的數據庫。如果調度失敗,我在windows服務中設置一個定時器一分鐘,以處理任何未處理的定單。我必須假設這是一個非常常見的情景。其他Web應用程序如何做到這一點?這是我可以考慮使其工作的唯一方法,所以我想知道處理是否會被任何或所有併發訂單阻塞。 – u84six 2012-07-13 15:55:57