2013-06-13 47 views
12

在IIS7,你曾经是能够使用Microsoft.Web.Administration DLL管理IIS。是否有托管API来管理IIS 8?

我加入这个引用到我的项目,但在site.Stop()运行在NotImplementedException下面的代码的结果:

using (var server = new ServerManager()) 
{ 
    var site = server.Sites.FirstOrDefault(s => s.Name == instanceName); 
    if (site != null) 
    { 
     site.Stop(); 
    } 
} 

是否有这个API的或更新的版本从.net管理IIS的替代方法?

我宁愿不使用WMI或者如果可能的话产卵的appcmd一个实例。

回答

4

我只是测试下面的代码段上两个IIS 8和7(使用7.9.0.0从GAC视窗8 & 7.0.0.0从的NuGet分别用于2008 R2机)

和我没有问题停止site:

var manager = new ServerManager(); 
manager.Sites[0].Stop(); 
manager.Dispose(); 

我必须做的唯一特别的事情就是明确地以管理员身份运行Linqpad以使其工作。也许这是你的问题?除非您的应用程序清单强制要求,否则Windows 8/Server 2012不会自动为您提供管理员访问权限。我相信这适用于7/2008 R2,但是因为您已明确标记为IIS8(UAC ftw!),所以无关紧要。

+0

我只是跑它实际上在IIS上,而不是从Visual Studio调试和代码工作正常,但它实际上并没有停止网站.. – Sean

+0

我不得不使用的应用程序池标识命名主要有管理权限得到这在IIS中工作。默认不起作用。当然,最终不要混合两个dll。他们只能在自己的IIS版本上工作。当我写这篇文章时,nuget没有管理IIS 8所需的7.9.0.0,因此您必须求助于GAC。 – Maverik

+0

-1。 NuGet软件包不是官方的,它可能与您计算机上的IIS安装不匹配。应始终使用GAC版本,这是唯一的Microsoft支持的方法。 –

0

确保您已打开“模拟”功能,并且正在分配模拟语句的用户和密码在web.config中输入正确的管理员信息。这将缓解任何进一步的问题。

在web.config中添加这种说法如果不是他们的了。

<identity impersonate="true" userName="LOCALMACHINE\ADMINUSER" password="PASSWORD" /> 

还要确保在IISManager中已将模拟开启为“已启用”,并且匿名身份验证已关闭“已禁用”。