2014-09-30 60 views
2

我的WCF_SQL接收位置輪詢出現了一個奇怪的問題。在BizTalk服務器的BizTalk 2010中執行輪詢間隔1分鐘,並涉及執行Stored_Proc從表中選擇的記錄和更新所選擇的記錄狀態爲類似「處理中」BizTalk WCF_SQL輪詢

Select top 10 * from ProcessingTable where Status = 'New'

Update ProcessingTable Set Status = 'Processing' where Status = 'New'

的接收管道是XMLReceive,它將記錄和路由到另一個業務流程進行處理。在編排結束時,將會有一個發送端口將狀態更新爲「已處理」。

問題來了,在我們維護和關閉BizTalk DB /應用程序服務器期間,主機實例將關閉,這些記錄將停留在「新建」狀態。維護和主機實例初始化後,這些記錄將立即被拾取並將其狀態更新爲「處理」。奇怪的是,它陷入了這種狀態,從來沒有進行更新到'處理'。這隻發生在前10名記錄(第一次拉/拾起)。隨後,所有其他剩餘的「新」記錄將被拾取併成功處理。目前,解決方法是始終監視滯留在「處理」中的記錄,並再次將這些記錄更新爲「新建」以重新處理處理。任何人都有這個問題的答案?

+0

這非常取決於你的具體解決方案。在我看來,您的發送端口將您的狀態更新爲「已處理」狀態不會被觸發。你可以仔細檢查 - 通過查看跟蹤 - 這個發送端口是否被觸發?如果是這樣:請檢查它是否被正確的參數觸發。 – 2014-09-30 13:57:33

+0

您的第二條sql語句將導致前10位以外的所有記錄被設置爲「正在處理」,這意味着您的輪詢過程將不再在隨後的週期中選取它們。 – 2014-10-02 20:25:55

回答

-2

你用過單身模式編排嗎?如果沒有,那麼嘗試一次,看看你是否得到同樣的問題,因爲我懷疑它面臨的競爭條件

+0

-1 Singleton業務流程是一種BizTalk反模式 – 2014-10-02 17:17:52

+0

是湯姆辛格爾頓也被稱爲反模式,但在這種情況下,我懷疑在插入記錄時發生了競爭情況。 – Tanmoy 2014-10-02 17:45:40

+0

因出現皮疹而降低您的答案而抱歉。但是,您應該在您的答案中解釋這一點。我會刪除downvote,但它被鎖定,除非你編輯你的答案 – 2014-10-02 20:19:13