2010-04-27 54 views
1

我需要從同一個域上的其他計算機監視IIS 7應用程序池中應用程序的狀態。我的監控應用程序必須使用C#並作爲Windows服務運行。使用csharp檢查狀態應用程序池iis7(拒絕訪問)

在我的服務器上,我創建了一個具有管理權限的用戶,並執行命令aspnet_regiis -ga machine \ username,這個工作成功完成。

我的問題是當我嘗試訪問應用程序池時,我仍然得到COMExcepttion「訪問被拒絕」。 我做錯了什麼或最後一步我錯過了什麼?

我以http://patelshailesh.com/index.php/create-a-website-application-pool-programmatically-using-csharp的代碼爲例。

 int status = 0; 
     string ipAddress = "10.20.2.13"; 
     string username = "username"; 
     string password = "password"; 
     try 
     { 
      DirectoryEntry de = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools/MyAppPoolName", ipAddress), username, password); 

      //the exception is thron here. 
      status = (int)de.InvokeGet("AppPoolState"); 

      switch (status) 
      { 
       case 2: 
        //Runnig 
        break; 
       case 4: 
        //Stopped 
        break; 
       default: 
        break; 
      } 
     } 
     catch (Exception ex) 
     { 

     } 

回答

1

您發現的代碼似乎是針對IIS6的。也許你會更好地使用新的和受支持的IIS7管理API。您可以先致電ServerManager.OpenRemote獲取ServerManager對象。

+0

感謝您的提示,我會看看它。我會給你反饋 – jackdbernier 2010-04-27 19:12:51

+0

是的(與DCOM):http://stackoverflow.com/questions/2544640/microsoft-web-administration-on-windows-xp/2744440#2744440 – JoeBilly 2010-04-30 12:26:11

0

您可能需要與AuthenticationType混淆,默認以2.0開頭,但您可能需要設置SSL。另外,我已經看到來自帳戶的拒絕訪問消息,並且「用戶必須在下次登錄時更改密碼」。

0

這在Windows 7和Windows Server 2008上運行得非常好(不幸的是不在XP和2003服務器上)。我必須通過服務器管理器在IIS中添加管理服務角色以啓用遠程連接。

下面是如何獲取應用程序池狀態的簡短示例。

public ObjectState State 
    { 
     get 
     { 
      ServerManager server = null; 
      ObjectState result = ObjectState.Unknown; 
      try 
      { 
       server = ServerManager.OpenRemote(address); 
       result = server.ApplicationPools[name].State; 
      } 
      finally 
      { 
       if (server != null) 
        server.Dispose(); 
      } 

      return result; 
     } 
    } 

感謝driis。