3

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

代码:

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

上面的代码不断失败并出现错误:Invalid index. (来自 HRESULT 的异常:0x80070585)

笔记:

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

解决此问题的任何帮助将不胜感激。

谢谢

4

1 回答 1

2

通过在一个非常大、受到严格监管的公司网络上使用连接到我的目标服务器的远程 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 证明该网站已经创建。

我希望这有帮助!

于 2016-03-07T10:58:41.217 回答