在IIS7中使用目录服务时,我无法使用调用(方法)来处理应用程序池。它始终返回未知名称异常。 名字不明。 (来自HRESULT的异常:0x80020006(DISP_E_UNKNOWNNAME))
我可以使用InvokeGet命令从应用程序池中获取属性数据,但调用始终失败。就好像在IIS6和IIS7之间更改了方法名称一样。
代码由运行在带有IIS6的Windows 2003机器上的网页运行,它正在查询带有IIS7.5的Windows 2008机顶
这是我的代码:
string machineName = this.MYMACH.Text;
string query;
string Usrnm = GetUSRNAME(); //decrypts admin user name
string Pswd = GetPSWORD(); //decrypts admin user password
query = String.Format("IIS://{0}/w3svc/AppPools/{1}", machineName, AppPoolName);
DirectoryEntry w3svc = new DirectoryEntry(query, Usrnm, Pswd);
try
{
if (4 == (int)w3svc.InvokeGet("AppPoolState")) // <--- works
{
w3svc.Invoke("Start", null);
errormsgs.Text = string.Format("Application pool {0} retarted", btn.Text);
}
else
{
w3svc.Invoke("Recycle", null); <--- Excepts
errormsgs.Text = string.Format("Application pool {0} recycled", btn.Text);
}
}
catch (Exception eee)
{
errormsgs.Text = string.Format("Application pool {0} recycle error {1}... Query text = {2}", btn.Text, eee.Message, query);
}
我尝试过几种方式调用: w3svc.Invoke(“Recycle”,null); w3svc.Invoke(“Recycle”,object [] {}); w3svc.Invoke( “循环”);
他们都没有工作
任何想法?
答案 0 :(得分:2)
这是因为您的代码无权使用本地DCOM进行调用。 试试:
<system.web>
<identity impersonate="true" userName="" password="" />
</system.web>
确保您使用本地域帐户有权在此计算机上使用DCOM。
此外,您可以更改本地DCOM设置以授予您的本地应用程序池用户权限。