2011-04-12 26 views
0

我打算使用.net Web服務批量處理數據庫記錄。 Web服務請求從SQL Server代理每分鐘調用一次的SQL Server存儲過程進入。我只希望一次批量運行,因爲這裏的要點是避免過載服務器。如何序列化.net Web服務的處理?

是否有序列化請求的好方法,或者如果已經有一個請求被拒絕請求?

我正在考慮讓Web服務實例在數據庫中寫入一個標誌,以便後續Web服務實例在啓動時可以讀取。如果它已經設置了,那麼Web服務將不做任何事情而返回。一個安全防範可能是,如果它已經設置了十分鐘,例如自設置了該標誌,那麼設置該標誌的Web服務實例將被認爲失敗。

有什麼想法?

乾杯,伊恩。

回答

1

您可以在Web服務上使用靜態屬性來設置它的運行時間,並且其他實例會檢查它(適當的鎖定後)並正常失敗,如果是這樣。這也可以考慮你的超時時間。

但是有沒有更簡單的方法來做到這一點?你似乎在談論從數據庫到Web服務,再次回到數據庫,以及你想要每分鐘運行一些東西。有些東西看起來不太合適。有沒有理由不能使用Windows服務,甚至Windows Task Scheduler?

+0

感謝您的回覆安德魯。我一直在閱讀你提到的另外兩種選擇。 Windows服務有點低級,需要實施調度,這是重新發明輪子的情況,而Windows任務計劃程序聽起來不可靠並且可能導致CMD窗口彈出。是的,我的計劃最終將從數據庫轉到Web服務,然後再回來,但數據庫的初始使用僅僅是爲了它的調度功能,所以我認爲這是一個紅鯡魚! – 2011-04-12 09:46:41

+0

我不認爲使用靜態屬性可以在Web場景中工作。在每臺機器上不會有一個值的副本?事實上,我會懷疑靜態在單個機器上甚至是唯一的。並不是說這是基於很多! :) – 2011-04-12 09:48:40

+0

但這就是我的意思;爲什麼數據庫只是爲了解決某些問題,而這正是Task Scheduler的用途。這並不是不可靠的,沒有理由必須打開一個命令窗口;它可以運行一個沒有專門用於這種事情的接口的進程,它可以以比你需要的複雜得多的方式來管理以前運行的實例。 – 2011-04-12 09:50:03