2012-09-28 16 views
5

पावरशेल में कोई मौजूदा आईआईएस 7 एप्लिकेशन पूल को नए पूल पूल में क्लोन कर सकता है, जो नए पूल में सभी स्रोत पूल सेटिंग्स को बनाए रखता है। इस तरह ...क्लोन/डुप्लिकेट/आईआईएस 7 में मौजूदा एप्लिकेशन पूल की प्रतिलिपि बनाएँ

import-module webadministration 
copy IIS:\AppPools\AppPoolTemplate IIS:\AppPools\NewAppPool -force 

अब मैं Microsoft.Web.Administration नाम स्थान में वर्गों का उपयोग सी # में एक ही बात करना चाहते हैं। मैंने नेमस्पेस ब्राउज़ किया है और मुझे इसे आसानी से करने का कोई तरीका नहीं मिल रहा है। MemberwiseClone विधि है जिसे मैं मौजूदा ऐप पूल की उथली प्रतिलिपि बनाने के लिए कॉल कर सकता हूं, लेकिन मुझे नहीं पता कि यह सभी मूल ऐप पूल गुणों को डुप्लिकेट करेगा या नहीं।

क्या कोई मदद कर सकता है?

+0

क्या आपने कभी ऐसा करने का तरीका निकाला था? – DanM7

+0

@ डैन Maguire, क्षमा करें नहीं, बिल्कुल नहीं। अब तक जो जवाब मिला है वह पूरी तरह से समस्या को हल नहीं करता है। यह दूसरे खंड में नए बनाए गए पूल में पहले अनुभाग में AppPool से गुण कैसे प्राप्त करें, यह पता नहीं लगाता है। फिलहाल मैं अपने सी # प्रोग्राम के अंदर सीधे पावरशेल कोड को कॉल करने पर विचार कर रहा हूं। मेरे पास इसे हल करने के लिए समय सीमा से पहले कुछ सप्ताह शेष हैं। एक बार जब मैं करता हूं तो मैं जो भी समाधान चुनता हूं उसे पोस्ट करूंगा। –

उत्तर

3

मैं सिर्फ एक ही रास्ता अब तक सी # में एक आवेदन पूल कॉपी करने के लिए मिल गया है:

private void creationizeAppPoolOldSchool(string strFullName) 
    { 
     RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
     Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 
     runspace.Open(); 
     RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 
     scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
     scriptInvoker.Invoke("import-module webadministration"); 
     string str = "copy IIS:\\AppPools\\_JANGO_FETT IIS:\\AppPools\\" + strFullName + " –force"; 
     scriptInvoker.Invoke(str); 
    } 

क्योंकि मेरी वास्तविक आवश्यकता सभी नए अनुप्रयोग पूल पर पूर्वनिर्धारित सेटिंग्स का एक सेट है करने के लिए है, मैं वास्तव में एक मौजूदा टेम्पलेट को कॉपी परित्यक्त पूल और इसके बजाय Microsoft.Web.Administration का उपयोग कर पूर्वनिर्धारित सेटिंग्स के साथ एक एप्लिकेशन पूल बनाएं। यद्यपि यह मूल प्रश्न नहीं है, मैं इसे किसी भी तरह से साझा करता हूं क्योंकि इस पोस्ट को ब्राउज़ करने वाला कोई भी इसमें रूचि रख सकता है:

public static void CreateCoCPITAppPool(string strName) 
    { 
     using (ServerManager serverManager = new ServerManager()) 
     { 
      ApplicationPool newPool = serverManager.ApplicationPools.Add(strName); 
      newPool.ManagedRuntimeVersion = "v4.0"; 
      newPool.AutoStart = true; 
      newPool.ProcessModel.UserName = "username"; 
      newPool.ProcessModel.Password = "password"; 
      newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; 
      newPool.Recycling.PeriodicRestart.Time = TimeSpan.Zero; 
      newPool.ProcessModel.IdleTimeout = TimeSpan.FromMinutes(10000); // .Zero; 
      newPool.ProcessModel.ShutdownTimeLimit = TimeSpan.FromSeconds(3600); 
      newPool.Failure.RapidFailProtection = false; 
      serverManager.CommitChanges(); 
      IDictionary<string, string> attr = newPool.Recycling.RawAttributes; 
      foreach (KeyValuePair<String, String> entry in attr) 
      { 
       // do something with entry.Value or entry.Key 
       Console.WriteLine(entry.Key + " = " + entry.Value); 
      } 
      ConfigurationAttributeCollection coll = newPool.Recycling.Attributes; 
      foreach (ConfigurationAttribute x in coll) 
      { 
       Console.WriteLine(x.Name + " = " + x.Value); 
      } 
     } 
    } 
1

मैं एक प्रति विधि के बारे में यकीन नहीं है, लेकिन आप वर्तमान एप्लिकेशन पूल के गुणों का उपयोग कर सकता है और उसके बाद ही गुणों के साथ एक नई एप्लिकेशन पूल बनाने:

// How to access a specific app pool 
DirectoryEntry appPools = new DirectoryEntry("IIS://" + serverName + "/w3svc/apppools", adminUsername, adminPassword); 
foreach (DirectoryEntry AppPool in appPools.Children) 
{ 
    if (appPoolName.Equals(AppPool.Name, StringComparison.OrdinalIgnoreCase)) 
    { 
     // access the properties of AppPool... 
    } 
} 

तो फिर तुम में एक नया पूल बनाने के लिए अपने विधि को फोन करके कोड के नीचे सूचीबद्ध:

CreateAppPool("IIS://Localhost/W3SVC/AppPools", "MyAppPool"); 

अनुप्रयोग पूल निर्माण विधि MSDN से:

static void CreateAppPool(string metabasePath, string appPoolName) 
{ 
    // metabasePath is of the form "IIS://<servername>/W3SVC/AppPools" 
    // for example "IIS://localhost/W3SVC/AppPools" 
    // appPoolName is of the form "<name>", for example, "MyAppPool" 
    Console.WriteLine("\nCreating application pool named {0}/{1}:", metabasePath, appPoolName); 

    try 
    { 
     if (metabasePath.EndsWith("/W3SVC/AppPools")) 
     { 
      DirectoryEntry apppools = new DirectoryEntry(metabasePath); 
      DirectoryEntry newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool"); 
      newpool.CommitChanges(); 
     } 
     else 
     { 
      Console.WriteLine(" Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node."); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Failed in CreateAppPool with the following exception: \n{0}", ex.Message); 
    } 
} 
संबंधित मुद्दे