2016-01-23 92 views
1

下面有一些可怕的錯誤,但我無法弄清楚什麼。 雖然該網站創建爲一種魅力,但應該與其關聯的應用程序池根本不會創建。爲什麼IIS應用程序池完全沒有創建?

public string Create(string sitename) 
     { 
      try 
      { 
       using (ServerManager serverMgr = new ServerManager()) 
       { 
        string strhostname = sitename + "." + domain; 
        string bindinginfo = ":80:" + strhostname; 

        if (!IsWebsiteExists(serverMgr.Sites, strhostname)) 
        { 
         Site mySite = serverMgr.Sites.Add(strhostname, "http", bindinginfo, "C:\\admin\\" + domain); 

         ApplicationPool newPool = serverMgr.ApplicationPools.Add(strhostname); 
         newPool.ManagedRuntimeVersion = "v4.0"; 
         newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated; 

         serverMgr.CommitChanges(); 
         return "Website " + strhostname + " added sucessfully"; 
        } 

        else 
        { 
         return "Name should be unique, " + strhostname + " already exists."; 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       return ex.Message; 
      } 
     } 

我在做什麼錯在這裏?

+0

綁定信息無效「:80:東西」。你需要解決這個問題。嘗試「*:80:某事」。 –

+0

@LexLi謝謝你,我按要求做了,但問題仍然存在 – OrElse

+0

你的代碼並不是只有一個問題,而是很多。你將不得不找到合適的樣本開始。 –

回答

1

這裏發生的事情是,當你創建你的網站,它會自動被分配到DefaultAppPool

你需要做的是更換您的網站的Application/),並在您剛纔創建的應用程序池指向它。

要做到這一點,最簡單的方法是首先明確你的新網站的Application集合,然後添加一個新的應用程序指向您的應用程序池。

考慮您的代碼段我把它改成如下:

Site mySite = serverMgr.Sites.Add(strhostname, "http", bindinginfo, "C:\\admin\\" + domain); 

// Clear Applications collection 
mySite.Applications.Clear(); 

ApplicationPool newPool = serverMgr.ApplicationPools.Add(strhostname); 
newPool.ManagedRuntimeVersion = "v4.0"; 
newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated; 

// Create new root app and specify new application pool 
Application app = mySite.Applications.Add("/", "C:\\admin\\" + domain); 
app.ApplicationPoolName = strhostname; 

serverMgr.CommitChanges(); 
+0

這真的很有幫助,但我仍然不明白爲什麼應用程序池設置爲「ApplicationPoolIdentity」 – OrElse

+0

@OrElse ApplicationPoolIdentity是池的標識會在Windows 2003下執行請求。在Windows 2003以前,這將是'Network Service'。'ApplicationPoolIdentity'是一個當你的池運行時動態創建的綜合身份G。你永遠不會在Windows用戶管理器中看到它。一個關於'ApplicationPoolIdentity'的問題將是一個完全獨立的事情。到目前爲止,我認爲我的答案爲您當前的問題提供瞭解決方案。 – Kev

1

我不希望應用程序池名稱中有標點符號。將域添加爲應用程序池名稱的一部分有點不同尋常 - 也許這就是源代碼。這裏討論基本方法,以及appcmd語法,以使命令行上發生同樣的事情 - 嘗試在cmd行上創建應用程序池以查看您的參數是否可接受。

Create an application pool that uses .NET 4.0

+0

錯誤(消息:標識符在當前命令用法中不被支持,您指定了「test.example.com」。是否有任何想法? – OrElse

+0

運行appcmd命令行應用程序時是否出現錯誤?在這種情況下,我會認爲它正在抱怨「test.example.com」作爲您的應用程序池名稱,我不確切知道應用程序池中的命名約束是什麼,但是我從來沒有看到過其中有周期的命名約束。作爲一個測試,像「myAppPool」而不是「test.example.com」 – PhillipH

相關問題