c# - आवेदन के भीतर आवेदन बनाने के लिए ServerManager का उपयोग करना



iis configuration (1)

ऐसा करने का तरीका साइट में हेरफेर करना है। Site.Applications संग्रह जो आपकी साइट के सभी अनुप्रयोगों का एक Site.Applications पेड़ है।

इन उदाहरणों के लिए हम "माईसाइट" नामक एक साइट मानेंगे जहां सामग्री स्थानीय हार्ड डिस्क पर स्थित है: d:\mysite\www । साइट का आईआईएस नंबर 3 और साइट अपने स्वयं के एप्लिकेशन पूल में भी रहती है जिसे "माईसाइट" भी कहा जाता है।

हम साइट के लिए निम्न फ़ोल्डर संरचना भी मानेंगे

शुरू करने के लिए हम उस साइट को प्राप्त करते हैं जिसे हम एक ऐप्लिकेशन जोड़ना चाहते हैं, हम पूरे चर site उपयोग करेंगे:

// Get my site
Site site = serverManager.Sites.First(s => s.Id == 3);

रूट "/" अनुप्रयोग:

प्रत्येक साइट पर "रूट" एप्लिकेशन होता है। अगर हम %systemroot%\windows\system32\inetsrv\config में स्थित applicationHost.config खोलते हैं और हमारी साइट के लिए <site> नोड का पता लगाते हैं तो हम निम्न को देखते हैं:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\www" />
  </application>
</site>

प्रत्येक <site> में <application> का संग्रह होता है। हमेशा कम से कम एक आवेदन होगा जो मूल अनुप्रयोग को परिभाषित करता है, /

applicationPool विशेषता निर्दिष्ट करता है कि कौन से एप्लिकेशन पूल का उपयोग करना है।

ध्यान दें कि एक एकल तत्व तत्व है: virtualDirectory

प्रत्येक application में virtualDirectory तत्वों का एक बाल संग्रह virtualDirectory है और आमतौर पर इस संग्रह में कम से कम एक तत्व होगा।

रूट एप्लिकेशन के भीतर डिफ़ॉल्ट <virtualDirectory> हमें बताता है:

  • यह रूट है ( path="/" ) और
  • यह भौतिक रूप से फाइल सिस्टम पर d:\MySite\www ( d:\MySite\www physicalPath="d:\MySite\www" ) पर स्थित है।

प्रत्येक virtualDirectory का path पैरेंट application पथ में निर्दिष्ट पथ से संबंधित है।

वर्चुअल निर्देशिका जोड़ना:

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

Application rootApp = site.Applications.First(a => a.Path == "/");
rootApp.VirtualDirectories.Add("/vdir_1", @"D:\MySite\other_content");
serverManager.CommitChanges();

परिणामस्वरूप कॉन्फ़िगरेशन इस तरह दिखता है:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
  </application>
</site>

और हम इसे आईआईएस प्रबंधक में देखते हैं:

किसी मौजूदा वर्चुअल निर्देशिका में वर्चुअल निर्देशिका जोड़ना:

अगर हम vdir1 एक बच्चे वर्चुअल निर्देशिका जोड़ना चाहते हैं तो हम करेंगे:

root.VirtualDirectories.Add("/vdir_1/sub_dir1", @"d:\MySite\more_content");

इसका परिणाम यह होगा:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
  </application>
</site>

आईआईएस प्रबंधक:

आभासी निर्देशिका जोड़ते समय ध्यान में रखने के लिए कुछ चीज़ें हैं:

  • जैसा कि बताया गया है, आभासी path हमेशा माता-पिता अनुप्रयोग path
  • आभासी path का अंतिम भाग उदाहरण /vdir_1 और .../sub_dir1 वर्चुअल निर्देशिका का नाम बन जाता है
  • एक ही भौतिक फ़ोल्डर में एक से अधिक वर्चुअल निर्देशिका बिंदु होने के लिए यह पूरी तरह कानूनी है
  • वर्चुअल निर्देशिका पथ के नाम भाग के अपवाद के साथ, पथ के सभी हिस्सों को भौतिक पथ या वेबसाइट रूट ( d:\MySite\www ) के भीतर वर्चुअल पथ के रूप में मौजूद होना चाहिए । यानी path पहले से मौजूद कुछ ओवरले करने में सक्षम होना चाहिए अन्यथा आभासी निर्देशिका आईआईएस प्रबंधक में दिखाई नहीं देगी।

उस अंतिम बिंदु के बारे में, उदाहरण के लिए, हमारे पास भौतिक फ़ोल्डर या वर्चुअल निर्देशिका नहीं है जिसे /vdir_2 कहा जाता है लेकिन निम्न कोड पूरी तरह से कानूनी है:

root.VirtualDirectories.Add("/vdir_2/sub_dir1", @"d:\MySite\even_more_content");

आपको IIS प्रबंधक में /vdir_2/sub_dir1 दिखाई नहीं देगा, लेकिन यह कानूनी है और आप वास्तव में इसे ब्राउज़ कर सकते हैं। हम इसे applicationHost.config में भी देख सकते हैं:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
</site>

फ़ोल्डर को एप्लिकेशन में कनवर्ट करें:

यदि आपने अभी अपनी साइट में /app_1 फ़ोल्डर में एक एएसपी.NET एप्लिकेशन अपलोड किया है और आप इसे अपने स्वयं के एप्लिकेशन में बदलना चाहते हैं तो हम यह करते हैं:

Application app = site.Applications.Add("/app_1", @"d:\MySite\www\app_1");
// set application pool, otherwise it'll run in DefaultAppPool
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();    

applicationHost.config हम एक नया <application> तत्व जोड़ा जा सकता है:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
</site>

आईआईएस में हम देखते हैं:

यह "एप्लिकेशन में कनवर्ट करें" राइट-क्लिक करने के बराबर है।

मौजूदा आवेदन में आवेदन जोड़ें:

मौजूदा एप्लिकेशन के बच्चे के रूप में एक आवेदन जोड़ना बहुत आसान है। मान लें कि हम /app_1/sub_app_1 उप-एप्लिकेशन को बनाना चाहते हैं:

हम बस करेंगे:

Application app = 
  site.Applications.Add("/app_1/sub_app_1", @"d:\mysite\www\app_1\sub_app_1");
app.ApplicationPoolName ="MySite";

परिणामस्वरूप कॉन्फ़िगरेशन इस तरह दिखेगा:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/sub_app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\www\app_1\sub_app_1" />
  </application>
</site>

आईआईएस में:

एप्लिकेशन में वर्चुअल निर्देशिका जोड़ें:

अब अगर हम इस एप्लिकेशन में वर्चुअल निर्देशिका जोड़ना चाहते हैं तो हम करेंगे:

Application app = site.Applications.First(a => a.Path == "/app_1");
app.VirtualDirectories.Add("/vdir_1", @"d:\MySite\other_content");

<virtualDirectory> हम एक नया <virtualDirectory> तत्व जोड़ा जा सकता है:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
    <virtualDirectory path="/vdir_1" physicalPath="d:\MySite\other_content" />
  </application>
</site>

आईआईएस में हम देखते हैं:

फिर यह ध्यान रखना महत्वपूर्ण है कि आभासी पथ /vdir1 हमेशा युक्त अनुप्रयोग के पथ से संबंधित है।

मौजूदा वर्चुअल निर्देशिका को एप्लिकेशन में कनवर्ट करें:

क्या होगा यदि हम वर्चुअल निर्देशिका को कन्वर्ट करना चाहते हैं जिसे हमने अभी बनाया है ( /app_1/vdir1 ) किसी एप्लिकेशन में? हमें इसे दो चरणों में करने की आवश्यकता होगी:

// Get the application
Application app_1 = site.Applications.First(a => a.Path == "/app_1");
// Find the virtual directory
VirtualDirectory vdir_1 = app_1.VirtualDirectories.First(v => v.Path == "/vdir_1");
// Remove it from app_1
app_1.VirtualDirectories.Remove(vdir_1);
// Create our application
Application vdir_1_app = site.Applications.Add("/app_1/vdir_1", vdir_1.PhysicalPath);
// set application pool, otherwise it'll run in DefaultAppPool
vdir_1_app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();    

परिणामी applicationHost.config इस तरह दिखता है:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
</site>

आईआईएस प्रबंधक में हम देखते हैं:

मौजूदा वर्चुअल निर्देशिका में एप्लिकेशन जोड़ें:

क्या होता है यदि हम किसी वर्चुअल निर्देशिका में कोई एप्लिकेशन जोड़ना चाहते हैं, तो यह कैसे काम करता है? इस उदाहरण में हम वर्चुअल निर्देशिका /vdir_1/sub_dir1 एक ऐप्लिकेशन जोड़ देंगे जिसे हमने पहले बनाया था।

Application app = 
   site.Applications.Add("/vdir_1/sub_dir1/app_2", @"d:\mysite\other_content");
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();

परिणामस्वरूप कॉन्फ़िगर इस तरह दिखता है:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
  <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
</site>

और आईआईएस प्रबंधक में हम देखते हैं:

मौजूदा बाल फ़ोल्डर को एक एप्लिकेशन में कनवर्ट करें:

अंतिम उदाहरण के रूप में, हम किसी एप्लिकेशन में /other_apps/sub_app_1 को चालू करना चाहते हैं:

हमारा कोड इस तरह दिखता है:

Application app = 
   site.Applications.Add("/other_apps/sub_app_1", @"d:\mysite\other_content");
app.ApplicationPoolName="MySite";
serverManager.CommitChanges();

परिणामस्वरूप कॉन्फ़िगरेशन:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
  <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
  <application path="/other_apps/sub_app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
</site>

आईआईएस प्रबंधक में:

उम्मीद है कि यह साइटों, अनुप्रयोगों और आभासी निर्देशिकाओं के बीच संबंधों को समझाने में मदद करता है।

मैं IIS 7 पर किसी वेबसाइट के भीतर एक एप्लिकेशन बनाने के लिए ServerManager (Microsoft.Web.Administration.dll) का उपयोग कर रहा हूं। मुझे इस एप्लिकेशन के भीतर कोई एप्लिकेशन बनाने या किसी वर्चुअल निर्देशिका को किसी एप्लिकेशन में कनवर्ट करने की आवश्यकता है (जैसे iis प्रबंधक सुविधा दाएं- क्लिक करें -> एप्लिकेशन में कनवर्ट करें) यह कैसे करने योग्य है? मुझे इस lib के बारे में बहुत कम दस्तावेज मिला, और इनमें से कोई भी इस विशेष कार्यक्षमता को संदर्भित नहीं करता है। धन्यवाद।





iis-7