2013-05-07 5 views
5

के बजाय दो एप्लिकेशन बनाता है IIS अनुप्रयोग निर्माण को स्वचालित करने की कोशिश कर रहा हूं और इसके लिए मैं Microsoft.Web.Administration लाइब्रेरी का उपयोग कर रहा हूं। यहाँ कोड का हिस्सा मैं उपयोग कर रहा हूँ है: यहाँMicrosoft.Web.Administration लाइब्रेरी का उपयोग करके IIS अनुप्रयोग निर्माण एक

IISHelper.cs

public static void CreateApplicationPool(string applicationPoolName) 
{ 
    using (ServerManager serverManager = new ServerManager()) 
    { 
     if (serverManager.ApplicationPools[applicationPoolName] != null) 
      return; 
     ApplicationPool newPool = serverManager.ApplicationPools.Add(applicationPoolName); 
     newPool.ManagedRuntimeVersion = "v4.0"; 
     serverManager.CommitChanges(); 
    } 
} 

public static void CreateSite(string siteName, string path) 
{ 
    using (ServerManager serverManager = new ServerManager()) 
    { 
     var sites = serverManager.Sites; 
     if (sites[siteName] == null) 
     { 
      sites.Add(siteName, "http", "*:80:", path); 
      serverManager.CommitChanges(); 
     } 
    } 
} 

public static void CreateApplication(string siteName, string applicationName, string path) 
{ 
    using (ServerManager serverManager = new ServerManager()) 
    { 
     var site = GetSite(serverManager, siteName); 
     var applications = site.Applications; 
     if (applications["/" + applicationName] == null) 
     { 
      applications.Add("/" + applicationName, path); 
      serverManager.CommitChanges(); 
     } 
    } 
} 

public static void CreateVirtualDirectory(string siteName, string applicationName, string virtualDirectoryName, string path) 
{ 
    using (ServerManager serverManager = new ServerManager()) 
    { 
     var application = GetApplication(serverManager, siteName, applicationName); 
     application.VirtualDirectories.Add("/" + virtualDirectoryName, path); 
     serverManager.CommitChanges(); 
    } 
} 

public static void SetApplicationApplicationPool(string siteName, string applicationPoolName) 
{ 
    using (ServerManager serverManager = new ServerManager()) 
    { 
     var site = GetSite(serverManager, siteName); 
     if (site != null) 
     { 
      foreach (Application app in site.Applications) 
      { 
       app.ApplicationPoolName = applicationPoolName; 
      } 
     }     
     serverManager.CommitChanges(); 
    } 
} 

और मुख्य कोड है जो कि ऊपर उल्लेख किया IISHelper वर्ग

string siteName = "TestSite"; 
string applicationName = "TestApp"; 
string virtualDirectoryName = "TestVirtualDirectory"; 
string applicationPoolName = "TestAppPool"; 
string physicalPath = @"C:\inetpub\mynewsite"; 

IISHelper.CreateApplicationPool(applicationPoolName); 
IISHelper.CreateSite(siteName, physicalPath); 
IISHelper.CreateApplication(siteName, applicationName, physicalPath); 
IISHelper.CreateVirtualDirectory(siteName, applicationName, virtualDirectoryName, physicalPath); 
IISHelper.SetApplicationApplicationPool(siteName, applicationPoolName); 

से तरीकों कॉल इस के निष्पादन के बाद है कोड IIS के साथ सफलतापूर्वक साइट बनाया गया है और आईआईएस के तहत उपयुक्त एप्लिकेशन पूल है, लेकिन जब मैं नव निर्मित एप्लिकेशन पूल के मेनू में "एप्लिकेशन देखें" चुन रहा हूं, तो मैं वहां दो एप्लिकेशन देख रहा हूं, लेकिन मैं सुर हूं ई केवल एक आवेदन होना चाहिए। मैं इस पर दो आवेदन निर्माण से बचने के लिए काम कर रहा हूं लेकिन कोई रास्ता नहीं ढूंढ सकता। यहाँ एक चित्र को दर्शाता हुआ है कि:

enter image description here

तो यहाँ मेरी सवाल यह है: के बाद से ऊपर कोड निष्पादन उल्लेख दो आवेदनों बनाई गई हैं और कैसे कोड कि इस मुद्दे से बचने के लिए संशोधित करने के लिए क्यों?

+2

GetSite और GetAplication संदर्भित कहां हैं? – thestar

+0

सार्वजनिक स्थैतिक साइट GetSite (ServerManager सर्वर प्रबंधक, स्ट्रिंग साइटनाम) { वापसी सर्वर प्रबंधक .साइट्स। फर्स्टऑर्डडिफॉल्ट (x => x.Name == साइटनाम); } निजी स्थिर आवेदन GetApplication ( ServerManager serverManager, स्ट्रिंग SITENAME, स्ट्रिंग APPLICATIONNAME) { वापसी serverManager.Sites .FirstOrDefault (x => x.Name == SITENAME) ?. आवेदन .FirstOrDefault (एक्स => x.Path == "/" + applicationName); } –

उत्तर

2

प्रत्येक साइट में "रूट एप्लिकेशन" शामिल होना चाहिए जो आप दूसरे ऐप के रूप में देख रहे हैं। असल में जब आप अपनी साइट को 'http://example.com/' (या जो भी होस्ट नाम आप बाइंडिंग में सेट करते हैं) के रूप में अनुरोध करते हैं, तो आप उस रूट ऐप से अनुरोध करेंगे, इसके अलावा आप/testApp बना रहे हैं, जिसे 'http://example.com/TestApp' कॉल करते समय अनुरोध किया जाएगा। जब आप साइट बनाते हैं और आप भौतिक पथ प्रदान करते हैं तो यह आंतरिक रूप से रूट ऐप "/" बनाता है। इसे देखने के लिए आप% windir% \ system32 \ inetsrv \ applicationHost.config खोल सकते हैं।

तो तकनीकी रूप से जो आप देख रहे हैं वह सही है, लेकिन आप वास्तव में एक नया ऐप नहीं चाहते हैं? और केवल रूट ऐप की आवश्यकता है? क्या आपको यूआरएल में वास्तव में/टेस्ट ऐप की आवश्यकता है?

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