AppPool Invoke返回未知名称。例外(DISP_E_UNKNOWNNAME)

时间:2011-09-07 17:16:27

标签: iis-7.5 invoke application-pool

在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( “循环”);

他们都没有工作

任何想法?

1 个答案:

答案 0 :(得分:2)

这是因为您的代码无权使用本地DCOM进行调用。 试试:

<system.web>
    <identity impersonate="true" userName="" password="" />
</system.web>

确保您使用本地域帐户有权在此计算机上使用DCOM。

此外,您可以更改本地DCOM设置以授予您的本地应用程序池用户权限。