2009-10-31 16 views
49

मेरे एएसपी.नेट वेब ऐप में प्राप्त करें, मैं इसे आईआईएस में बनाया गया था, जो सर्वर के लिए अद्वितीय है, यह नाम देखना चाहता हूं। मुझे वेबसाइट के लिए डोमेन नाम में दिलचस्पी नहीं है, लेकिन आईआईएस में साइट पर दिया गया वास्तविक नाम।आईएसआई साइट का नाम एएसपी.नेट वेबसाइट

मैं IIS6 के लिए मज़बूती से यह करने के लिए और 7

स्पष्ट मैं आईआईएस में दिए गए नाम, डोमेन नाम नहीं है और न वर्चुअल निर्देशिका पथ के बारे में बात कर रहा हूँ होना करने के लिए सक्षम होना चाहिए।

Value from IIS I'd like to read from C# http://img252.imageshack.us/img252/6621/capturedz.png

+0

नीचे का उपयोग कर सकते हैं प्रेरणा पर थोड़ा और विस्तार से बता सकते हैं? –

+1

मैं अपने द्वारा लिखे गए एक वेब एप्लिकेशन के लिए लाइसेंसिंग कर रहा हूं और मुझे यह सुनिश्चित करने की ज़रूरत है कि लाइसेंस कुंजी का उपयोग केवल एक ही सर्वर पर प्रति वेब ऐप के बाद किया जाता है। वेब ऐप आईआईएस साइट को सौंपे गए कई डोमेन नामों के साथ काम करता है, इसलिए साइट के डोमेन नाम की कुंजी बाध्यकारी नहीं होगी। मशीन नाम के लिए बाध्यकारी वही व्यर्थ में ऐसा नहीं होगा क्योंकि मेरा ऐप उसी मशीन पर एकाधिक क्लाइंट के लिए स्थापित हो सकता है। संक्षेप में मुझे किसी विशेष मशीन पर आईआईएस वेबसाइट को विशिष्ट रूप से पहचानने की आवश्यकता है। चूंकि आईआईएस एक ही नाम के साथ कई साइटों की अनुमति नहीं देता है, इसलिए मुझे लगता है कि यह जाने का तरीका है। –

+0

मेरा मतलब यह नहीं था कि मैं संवेदना सुन रहा हूं, मैं सिर्फ उत्सुक हूं कि कोई ऐसा क्यों करना चाहता है। –

उत्तर

55
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 
+0

के लिए डुप्लिकेट नहीं है, यह वही है जो मैं ढूंढ रहा था। बहुत बहुत धन्यवाद। क्या आप जानते हैं कि यह आईआईएस 6 और 7 दोनों के लिए काम करता है? –

+0

क्षमा करें, मैंने आईआईएस 6 में इसका परीक्षण नहीं किया है। –

+1

मैंने आईआईएस 7/5.1 के लिए कुछ मिनट की उम्र के लिए इसका परीक्षण किया, मुझे लगता है कि यह आईआईएस 6 (9 0%) के लिए काम करता है। –

10

यहाँ साइट आईडी पुन: प्राप्त करने में एक related post है।

यहाँ

कुछ कोड है कि आप के लिए काम कर सकते हैं:

using System.DirectoryServices; 
using System; 

public class IISAdmin 
{ 
    public static void GetWebsiteID(string websiteName) 
    { 
     DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc"); 

    foreach(DirectoryEntry de in w3svc.Children) 
    { 
     if(de.SchemaClassName == "IIsWebServer" && de.Properties["ServerComment"][0].ToString() == websiteName) 
     { 
      Console.Write(de.Name); 
     } 

    } 

    } 
    public static void Main() 
    { 
    GetWebsiteID("Default Web Site"); 
    } 

}

यहाँ original post के लिए लिंक है।

मुझे यकीन नहीं है कि यह आईआईएस 7 पर काम करेगा, लेकिन यदि आप आईआईएस 7 के लिए आईआईएस 6 संगतता घटकों को स्थापित करते हैं तो इसे काम करना चाहिए।

9

आप के लिए ServerManager (Microsoft.Web.Administration) जो पढ़ सकते हैं और IIS 7.0 विन्यास सिस्टम के लिए उपयोग लिखने प्रदान करता है देख रहे हैं।

माइक्रोसॉफ्ट.Web.Administration.SiteCollection के माध्यम से Iterate, साइट ऑब्जेक्ट का उपयोग करके अपनी वेबसाइट का संदर्भ प्राप्त करें और नाम संपत्ति का मूल्य पढ़ें।

// Snippet   
using (ServerManager serverManager = new ServerManager()) { 

var sites = serverManager.Sites; 
foreach (Site site in sites) { 
     Console.WriteLine(site.Name); // This will return the WebSite name 
} 

तुम भी LINQ का उपयोग कर सकते ServerManager.Sites संग्रह क्वेरी करने के लिए (नीचे उदाहरण देखें)

// Start all stopped WebSites using the power of Linq :) 
var sites = (from site in serverManager.Sites 
      where site.State == ObjectState.Stopped 
      orderby site.Name 
      select site); 

     foreach (Site site in sites) { 
      site.Start(); 
     } 

नोट: Microsoft.Web.Administration काम करता है केवल साथ IIS7

आईआईएस 6 के लिए आप ऐसा करने के लिए एडीएसआई और डब्लूएमआई दोनों का उपयोग कर सकते हैं, लेकिन मेरा सुझाव है कि आप डब्लूएमआई के लिए जाएं जो एडीएसआई से तेज़ है। यदि डब्लूएमआई का उपयोग करते हैं, तो WMI Code Creator 1.0 (माइक्रोसॉफ्ट द्वारा नि: शुल्क/विकसित) पर एक नज़र डालें। यह आपके लिए कोड उत्पन्न करेगा।

HTH

0

आप जब एक दूरस्थ सर्वर से कनेक्ट ServerManager.OpenRemote ("Servername") प्राप्त करने वाली प्रथम आवश्यकता होगी।

मूल रूप से इस

  using (ServerManager srvMgr = ServerManager.OpenRemote("serverName")) 
      { 

      } 

see msdn help

10

@belugabob और @CarlosAg के रूप में की तरह कुछ कर रही पहले से ही मैं नहीं बल्कि System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName() के बजाय System.Web.Hosting.HostingEnvironment.SiteName प्रयोग करेंगे क्योंकि IApplicationHost.GetSiteName विधि सीधे नाम से जाना इरादा नहीं है उल्लेख किया !(msdn)

तो होस्टिंगEnvironment.SiteName प्रॉपर्टी का उपयोग करके आप बेहतर हैं! (msdn)

मुझे लगता है कि इस दस्तावेज़ के संबंध में सही जवाब होना चाहिए;)

+1

इसे इंगित करने के लिए धन्यवाद। मेरे मामले में System.Web.Hosting.HostingEnvironment.AplicationHost.GetSiteName() ने काम किया, लेकिन फिर मैं धारावाहिक के साथ "सदस्य के लिए प्रकार हल नहीं किया गया" में भाग गया, कि मैं ट्रैक करने में सक्षम नहीं था। होस्टिंगइन्वायरमेंट पर स्विच करने के बाद। साइटनाम यह चला गया था। मुझे लगता है कि मार्शलबीरफॉब्जेक्ट के साथ सीरियलाइजेशन के साथ संगत नहीं है। बस अगर किसी ने भी इसे मारा है, तो होस्टिंग एंटरप्राइज़ पर स्विच करना .इटनाम ने उस समस्या को हल किया। –

0

आप कोड

private string WebsiteName() 
{ 
    string websiteName = string.Empty; 
    string AppPath = string.Empty; 
    AppPath = Context.Request.ServerVariables["INSTANCE_META_PATH"]; 
    AppPath = AppPath.Replace("/LM/", "IIS://localhost/"); 
    DirectoryEntry root = new DirectoryEntry(AppPath); 
    websiteName = (string)root.Properties["ServerComment"].Value; 
    return websiteName; 
} 
संबंधित मुद्दे