मुझे लगता है कि अनुसूचित कार्यों कि मेरे Windows सेवा एक टाइमस्टैम्प बंद आधारित प्रक्रिया चाहिए और मैं सोच रहा था क्या विकल्प मैं मतदान के लिए इसवैकल्पिक
SELECT *
FROM mydb
WHERE SYSUTCDATE() >= timestamp
मैं की तरह तालिका है शामिल एक MSSQL तालिका है डी शायद कम से कम हर 5 सेकंड में टेबल मतदान करने की जरूरत है। असल में मैं चाहता हूं कि मेरी विंडोज सेवा तालिका में टाइमस्टैम्प द्वारा निर्धारित समय पर डेटा को संसाधित करे।
मेरे लिए यह सबसे प्रभावी तरीका प्रतीत नहीं होता है। मैंने पहले ही डीएमएल & सीएलआर ट्रिगर्स में देखा है और मुझे नहीं लगता कि वे काम करेंगे जब डेटा बदलता है और टाइमस्टैम्प पास नहीं होने पर वे आग लगेंगे। विचार?
अद्यतन 2:
मुझे एहसास हुआ है कि इसे "अनुसूचित कार्य" शब्दों का एक गरीब पसंद थी तो मैं और अधिक विस्तार में यह वर्णन करने के लिए कोशिश करेंगे।
इस परियोजना का लक्ष्य हमारे व्यापार तर्क के आधार पर लोगों को फोन अधिसूचनाएं भेजता है। एक परिदृश्य यह है कि एक आंतरिक घटना के आधार पर कई लोगों को विशिष्ट समय पर फोन किया जाना चाहिए। फोन कॉल का उत्तर देने के तरीके के आधार पर एक ही व्यक्ति को कई बार बुलाया जा सकता है। इस प्रकार चीजों को सरल बनाने और जटिलता और प्रत्येक फोन कॉल की स्थिति के प्रबंधन के ऊपरी हिस्से को हटाने के लिए मैंने सोचा कि यह एक अच्छा विचार होगा कि प्रत्येक फोन कॉल को तालिका में प्रवेश के रूप में सेट करके निर्धारित किया जाए। जब अधिसूचनाओं को रोका जाना चाहिए, लंबित फोन कॉल तालिका से हटा दिए जाते हैं। यह विंडोज सेवा के डिजाइन को बहुत सरल रखेगा। यह सब कुछ तालिका में इसके टाइमस्टैम्प के आधार पर अधिसूचना भेज देगा।
अद्यतन 1:
संदेश कतार
मैं पता लगा नहीं है कि कैसे इस उचित समय पर कतार पर संदेशों डाल देंगे।
SqlDependency
मैं Detecting Changes with SqlDependency से उदाहरण कोड का उपयोग कर समस्या हो रही है। किसी कारण से OnChange ईवेंट केवल शुरुआत में निकाल दिया जाता है, बाद में कुछ भी नहीं होता है।
अपडेट: मुझे नहीं लगता कि एसक्लड परस्परेंसी काम करेगा क्योंकि तालिका में डेटा ट्रिगर आग बनाने के लिए नहीं बदलेगा।
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT timestamp,othercolumn FROM mydb WHERE SYSUTCDATE() >= timestamp",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
क्या आपने इसके बजाय एक संदेश कतार का उपयोग करने पर विचार किया है? – recursive
एसक्यूएल पर निर्भरता का प्रयास करें: http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx –
क्या आपने इन्हें नौकरियों में बदलने और उन्हें SQL सर्वर एजेंट के माध्यम से चलाने पर विचार किया है? –