मैं वर्तमान में टाइमरजोब पर काम कर रहा हूं जो कुछ साइट संग्रह प्रबंधन करता है। जब नौकरी चलता है तो यह किसी साइट संग्रह के यूआरएल को पुनः प्राप्त करने के लिए एक सूची में दिखता है, तो यह जांचने के लिए कि साइट अभी भी मौजूद है या नहीं, यह SPSite.Exists()
पर कॉल करती है।SPSite.Exists() सत्य लौटाता है हालांकि साइट संग्रह मौजूद नहीं है
टाइमर जॉब का परीक्षण करने के लिए मैं साइट संग्रह हटाता हूं लेकिन सूची में इसी प्रविष्टि को छोड़ देता हूं। फिर मैं टाइमर जॉब शुरू करता हूं और डीबग मोड में अपने कोड के माध्यम से कदम उठाता हूं। यह देखने के लिए बिंदु की बात आती है कि साइट मौजूद है या नहीं SPSite.Exists()
सत्य लौटाता है।
जब मैं एक ही साइट संग्रह के लिए दूसरी बार टाइमर जॉब चलाता हूं तो SPSite.Exists()
विधि झूठी वापसी के रूप में होती है।
तो अब मुझे आश्चर्य है कि क्यों SPSite.Exists()
पहली बार नौकरी चलाने पर झूठी परिणाम देता है। क्या यह कैशिंग के कारण हो सकता है?
जब मैं टाइमर जॉब SPSite.Exists()
के बाहर एक ही कोड चलाता हूं तो हर बार सही परिणाम देता है।
अद्यतन
तो मैं कुछ और डिबगिंग किया था और ऐसा लगता है के रूप में इस समस्या को वास्तव में कुछ कैशिंग तंत्र के रूप में यह नहीं होती है जब Windows SharePoint सेवाएँ टाइमर सेवा के बाद दोबारा शुरू किए जाने के कारण होता है परीक्षण साइट संग्रह हटा दिया गया है और टाइमर जॉब शुरू होने से पहले।
फिलहाल मैं हटाए गए साइट तक पहुंचने और अपवाद को पकड़ने की कोशिश करने के अलावा एक और समाधान की कल्पना नहीं कर सकता जिसे यह निर्धारित करने के लिए फेंक दिया जाएगा कि साइट वास्तव में मौजूद है या नहीं।
अद्यतन 2
कुछ और परीक्षण करने के बाद मुझे एहसास हुआ कि समस्या SPSite.Exists की पहली कॉल() (TimerJob के अंदर) के लिए नहीं होती है के बाद टाइमर सेवा को पुन: प्रारंभ किया गया है। दूसरा कॉल (एक अलग साइट संग्रह के लिए) अभी भी ज्ञात समस्या का कारण बनता है।
अद्यतन 3
फिलहाल मैं अपने समस्या को हल करने के लिए एक बदसूरत हैक उपयोग कर रहा हूँ। जब SPSite.Exists() सत्य लौटाता है हालांकि यह वास्तव में अस्तित्व में नहीं है, मैं एक एसपीएससाइट ऑब्जेक्ट बनाता हूं और अपनी उपयोग संपत्ति को कॉल करके FileNotFoundException को उत्तेजित करने का प्रयास करता हूं। जब अपवाद उत्पन्न होते हैं तो मुझे पता है कि साइट मौजूद नहीं है। अपवाद के बाद आश्चर्यजनक रूप से पर्याप्त SPSite.Exists() सही परिणाम (झूठा) देता है।
वहां कोई अन्य सुझाव है?
अलविदा, फ़्लो
मेरे समाधान (अपडेट 3) की तुलना में आपका समाधान अपवाद को पकड़ने से बचाता है। मुझे यह पसंद है। तो यह मेरे कोड में सुधार होगा। – Flo