我需要从同一域中的其他计算机上监视IIS 7的应用程序池中的应用程序的状态。我的监控应用程序必须使用C#并作为Windows服务运行。
在我的服务器上,我创建了一个具有管理权限的用户,并执行命令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)
{
}
答案 0 :(得分:1)
您找到的代码似乎适用于IIS6。也许您最好使用新的和受支持的IIS7管理API。您可以先致电ServerManager.OpenRemote来获取ServerManager对象。
答案 1 :(得分:0)
您可能需要使用AuthenticationType,默认从2.0开始是安全的,但您可能需要设置SSL。此外,我已经看到来自帐户的拒绝访问邮件,其中“用户必须在下次登录时更改密码”。
答案 2 :(得分:0)
这在Windows 7和Windows Server 2008上运行良好(遗憾的是不适用于XP和2003 Server)。我必须通过服务器管理器在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。