2009-07-06 16 views
6

मैं वर्तमान में टाइमरजोब पर काम कर रहा हूं जो कुछ साइट संग्रह प्रबंधन करता है। जब नौकरी चलता है तो यह किसी साइट संग्रह के यूआरएल को पुनः प्राप्त करने के लिए एक सूची में दिखता है, तो यह जांचने के लिए कि साइट अभी भी मौजूद है या नहीं, यह SPSite.Exists() पर कॉल करती है।SPSite.Exists() सत्य लौटाता है हालांकि साइट संग्रह मौजूद नहीं है

टाइमर जॉब का परीक्षण करने के लिए मैं साइट संग्रह हटाता हूं लेकिन सूची में इसी प्रविष्टि को छोड़ देता हूं। फिर मैं टाइमर जॉब शुरू करता हूं और डीबग मोड में अपने कोड के माध्यम से कदम उठाता हूं। यह देखने के लिए बिंदु की बात आती है कि साइट मौजूद है या नहीं SPSite.Exists() सत्य लौटाता है।

जब मैं एक ही साइट संग्रह के लिए दूसरी बार टाइमर जॉब चलाता हूं तो SPSite.Exists() विधि झूठी वापसी के रूप में होती है।

तो अब मुझे आश्चर्य है कि क्यों SPSite.Exists() पहली बार नौकरी चलाने पर झूठी परिणाम देता है। क्या यह कैशिंग के कारण हो सकता है?

जब मैं टाइमर जॉब SPSite.Exists() के बाहर एक ही कोड चलाता हूं तो हर बार सही परिणाम देता है।


अद्यतन

तो मैं कुछ और डिबगिंग किया था और ऐसा लगता है के रूप में इस समस्या को वास्तव में कुछ कैशिंग तंत्र के रूप में यह नहीं होती है जब Windows SharePoint सेवाएँ टाइमर सेवा के बाद दोबारा शुरू किए जाने के कारण होता है परीक्षण साइट संग्रह हटा दिया गया है और टाइमर जॉब शुरू होने से पहले।

फिलहाल मैं हटाए गए साइट तक पहुंचने और अपवाद को पकड़ने की कोशिश करने के अलावा एक और समाधान की कल्पना नहीं कर सकता जिसे यह निर्धारित करने के लिए फेंक दिया जाएगा कि साइट वास्तव में मौजूद है या नहीं।


अद्यतन 2

कुछ और परीक्षण करने के बाद मुझे एहसास हुआ कि समस्या SPSite.Exists की पहली कॉल() (TimerJob के अंदर) के लिए नहीं होती है के बाद टाइमर सेवा को पुन: प्रारंभ किया गया है। दूसरा कॉल (एक अलग साइट संग्रह के लिए) अभी भी ज्ञात समस्या का कारण बनता है।


अद्यतन 3

फिलहाल मैं अपने समस्या को हल करने के लिए एक बदसूरत हैक उपयोग कर रहा हूँ। जब SPSite.Exists() सत्य लौटाता है हालांकि यह वास्तव में अस्तित्व में नहीं है, मैं एक एसपीएससाइट ऑब्जेक्ट बनाता हूं और अपनी उपयोग संपत्ति को कॉल करके FileNotFoundException को उत्तेजित करने का प्रयास करता हूं। जब अपवाद उत्पन्न होते हैं तो मुझे पता है कि साइट मौजूद नहीं है। अपवाद के बाद आश्चर्यजनक रूप से पर्याप्त SPSite.Exists() सही परिणाम (झूठा) देता है।

वहां कोई अन्य सुझाव है?

अलविदा, फ़्लो

उत्तर

4

मेरे लिए एक ही। साइट साइट संग्रह को हटाए जाने के बाद भी मुझे एक ही समस्या थी, मुझे अभी भी SPSite.Exists(); के लिए सच हो गया है अजीब बात यह थी कि अगर मैंने ब्राउज़र में हटाए गए साइट-संग्रह URL को खोला - तो पहले अनुरोध के परिणामस्वरूप HTTP 400 त्रुटि संदेश हुआ, जबकि दूसरा अनुरोध अपेक्षित HTTP 404 था।

मेरा कामकाज सिर्फ यूआरएल के लिए पहला अनुरोध बनाने के लिए HTTP GET बनाना था और फिर साइट अस्तित्व के लिए फिर से जांचना था।

private void touchWeb(string url, System.Net.ICredentials credentials) 
    { 
     try 
     { 
      Uri uri = new Uri(url); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
      request.Credentials = credentials; 

      request.Method = "GET"; 
      string result = ""; 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        using (StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8)) 
        { 
         result = readStream.ReadToEnd(); 
        } 
       } 
      } 
     } 
     catch (Exception) { } 
    } 
+0

मेरे समाधान (अपडेट 3) की तुलना में आपका समाधान अपवाद को पकड़ने से बचाता है। मुझे यह पसंद है। तो यह मेरे कोड में सुधार होगा। – Flo

5

मैं इस एक ही मुद्दा था और कोशिश की HTTP अनुरोध विधि लेकिन पाया यह एक ही बार में साइटों की एक बड़ी संख्या की जाँच के लिए कुछ हद तक धीमी गति से किया जाना है। इसके बजाय मैं इस तरह कुछ उपयोग कर समाप्त हुआ:

public bool SPSiteExists(string url) { 
    SPSite.InvalidateCacheEntry(new Uri(url), Guid.Empty); 
    return SPSite.Exists(uri); 
} 
+0

लगता है कि कोई मेरे साथ सहमत है। यदि आप कभी भी SharePoint Exchange पर कोई उपयोगकर्ता बनाना चाहते हैं, तो इस प्रश्न पर पोस्ट करने के लिए स्वतंत्र महसूस करें। आपकी खोज मेरी तुलना में पुरानी प्रतीत होती है (इस समस्या के बीच संबंधों की खोज करते समय और धीरे-धीरे हटाने की नौकरी के दौरान, आज ही आपका प्रश्न देखा गया)। लिंक: http://sharepoint.stackexchange.com/questions/57553/spsite-exists-returning-true-for-a-just-deleted-site-collection – SPArchaeologist

+0

धन्यवाद, मैंने ऐसा किया है – katbyte

+0

धन्यवाद की कोई आवश्यकता नहीं है। मैंने आपके संस्करण को वोट दिया है और स्वीकार कर लिया है। मैं अभी भी अभी के लिए मेरा रख रहा हूं क्योंकि इसमें कुछ और जानकारी (परावर्तक सामग्री) शामिल है - हालांकि इसे विकी में परिवर्तित कर सकती है। – SPArchaeologist

संबंधित मुद्दे