使用Microsoft.Web.Administration以编程方式在IIS7中创建远程站点:索引无效。 (来自HRESULT的异常:0x80070585)

时间:2013-10-24 19:19:53

标签: c# iis iis-7.5 servermanager

我正在尝试为我们的Web应用程序编写配置工具。我正在尝试使用Microsoft.Web.Administration.ServerManager在IIS7.5中远程创建一个网站。

CODE:

using (ServerManager serverManager = ServerManager.OpenRemote("MyRemoteHost")) {
    serverManager.Sites.Add("Contoso", "http", "*:80:www.contoso.com", @"C:\inetpub\wwwroot\Contoso");
    serverManager.CommitChanges();
}

以上代码连续失败并出现错误:索引无效。 (HRESULT异常:0x80070585)

备注:

  • 如果我在主机上本地运行此代码,我不会遇到错误,并且网站创建成功。
  • 我的用户对远程主机具有管理权限。
  • 我可以在远程主机上执行其他操作,例如阅读网站列表。
  • 我的工作站正在运行Windows 8
  • 我成功地针对Server 2012主机执行了上述代码。在Windows 8客户端上针对Server 2008R2主机运行此代码时,似乎存在某种不兼容性。
  • 我正在使用Microsoft.Web.Administration.7.0.0.0。

非常感谢任何解决此问题的帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

通过在一个非常大的,受到严格监管的公司网络上使用连接到我的目标服务器的远程serverManager对象,我也遇到了同样的问题。

经过一些调查后,结果证明网站是在服务器管理器的特定实例上创建的,尽管有错误,但使用.CommitChanges();该serverManager对象上的方法将成功保存新网站。

var serverManager = ServerManager.OpenRemote("ServerName");
var sites = string.Join(";", serverManager.Sites.Select(o => o.ToString()));
Console.WriteLine(sites);
try
{
    serverManager.Sites.Add("newWebSite", @"D:\TestSite", 80);
}
catch ( Exception e )
{
    Console.WriteLine(e);
}
Console.WriteLine(string.Join(";", serverManager.Sites.Select(o => o.ToString())));
Console.WriteLine(string.Join(";", ServerManager.OpenRemote("ServerName").Sites.Select(o => o.ToString())));
serverManager.CommitChanges();
Console.WriteLine(string.Join(";", ServerManager.OpenRemote("ServerName").Sites.Select(o => o.ToString())));
Console.ReadLine();

使用此示例代码,未捕获catch,表明程序仍然有效,我可以清楚地看到在serverManager的原始实例和我创建的新实例中添加到远程服务器的网站。

控制台返回了这个:

CopyOfLive;Default Web Site
CopyOfLive;Default Web Site;newWebSite
CopyOfLive;Default Web Site
CopyOfLive;Default Web Site;newWebSite

此外,检查服务器上的IIS证明该网站已创建。

我希望这有帮助!