2012-12-05 17 views
5

मैं प्रोग्राम के रूप में देखने के लिए कि इसे बंद कर दिया है आईआईएस से अपनी साइट का दर्जा प्राप्त करने के लिए कोशिश कर रहा हूँ वापस हो जाता है, लेकिन मैं निम्नलिखित त्रुटि हो रही है,प्रोग्राम आईआईएस से साइट का दर्जा मिल, COM त्रुटि

ऑब्जेक्ट पहचानकर्ता नहीं है एक वैध वस्तु का प्रतिनिधित्व करते हैं। (HRESULT से अपवाद: 0x800710D8)

एप्लिकेशन साइट स्थिति तक पहुंचने के लिए ServerManager साइट क्लास का उपयोग कर रहा है। यहाँ कोड,

//This is fine, gets back the site 
var serverManager = new Microsoft.Web.Administration.ServerManager(ConfigPath); 
var site = serverManager.Sites.FirstOrDefault(x => x.Id == 5); 
if (site == null) return; 
var appPoolName = site.Applications["/"].ApplicationPoolName; 
//error! 
var state = site.State; 

है मैं इस मुद्दे को अलग करने के स्थिर साइट के साथ परीक्षण, यह सुनिश्चित करें कि साइट को और चल रहा है बनाने है, सभी विन्यास मान्य हैं, वैध अनुप्रयोग पूल ... आदि इंगित।

मुझे बताएं कि आपको अधिक जानकारी चाहिए या नहीं। क्या यह COM बात है?

उत्तर

7

मुझे पता चला कि समस्या कहां है। असल में, सर्वर मैनेजर के दो भाग हैं, सर्वर मैनेजर का पहला भाग आपको कॉन्फ़िगरेशन फ़ाइल से साइट विवरण पढ़ने की अनुमति देता है, जो मैं ऊपर कर रहा हूं। इसके साथ समस्या यह है कि आप केवल उस जानकारी को प्राप्त कर सकेंगे जो फ़ाइल और साइट स्थिति में है, इसका हिस्सा नहीं है।

सर्वर प्रबंधक का दूसरा भाग आपको आईआईएस से सीधे कनेक्ट करने की अनुमति देता है और यह COM तत्व के साथ बातचीत करके ऐसा करता है। तो मैं क्या कर किया जाना चाहिए यह है:

ServerManager manager= ServerManager.OpenRemote("testserver"); 
var site = manager.Sites.First(); 
var status = site.State.ToString() ; 
+1

बहुत आसान एक बहुत ही उपयोगी है। आपका बहुत बहुत धन्यवाद! –

+0

यह सही है, सामान्य रूप से एमएसडीएन में दस्तावेज के रूप में, जो कि सर्वरमैनेजर के लिए कन्स्ट्रक्टर ओवरलोड है जो भौतिक पथ प्राप्त करता है, कभी भी आंतरिक आधारभूत संरचना के लिए उपयोग नहीं किया जाना चाहिए, और जैसा कि आपने देखा है कि इसका उपयोग होने पर बहुत हानिकारक प्रभाव हो सकते हैं। गलत SSL कॉन्फ़िगरेशन और प्रमाणपत्र को हटाने के रूप में खराब चीजें जो वास्तव में आपकी कॉन्फ़िगरेशन को तोड़ सकती हैं, इसलिए हाँ, अगर दूरस्थ मशीनों को प्रबंधित करने का प्रयास केवल OpenRemote का उपयोग करें। –

2

मैं एक ऐसी ही समस्या थी लेकिन मेरा देरी ServerManager वस्तु पर CommitChanges करने के लिए कॉल से परिवर्तन को सक्रिय करने की जरूरत की वजह से किया गया था।

ServerManager CommitChanges makes changes with a slight delay

ऐसा लगता है मतदान की तरह सुसंगत परिणाम प्राप्त करने के लिए आवश्यक है: मैं इस सवाल का जवाब मैं यहाँ की जरूरत मिल गया। इस समस्या के हल होने के समान कुछ (मुझे नए जोड़े गए एप्लिकेशन पूल तक पहुंचने पर अपवाद मिला):

 ... 
     create new application pool 
     ... 
     sman.CommitChanges(); 
     int i = 0; 
     const int max = 10; 
     do 
     { 
      i++; 
      try 
      { 
       if (ObjectState.Stopped == pool.State) 
       { 
        write_log("Pool was stopped, starting: " + pool.Name); 
        pool.Start(); 
       } 
       sman.CommitChanges(); 
       break; 
      } 
      catch (System.Runtime.InteropServices.COMException e) 
      { 
       if (i < max) 
       { 
        write_log("Waiting for IIS to activate new config..."); 
        Thread.Sleep(1000); 
       } 
       else 
       { 
        throw new Exception(
         "CommitChanges timed out efter " + max + " attempts.", 
         e); 
       } 
      } 
     } while (true); 
     ... 
+0

यह मेरे लिए मुद्दा था दोस्त मदद के लिए +1 :) – Shazi