我正在尝试为我们的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();
}


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

笔记:


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


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

谢谢

最佳答案

通过在非常严格的大型公司网络上使用连接到目标服务器的远程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();


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

控制台返回此:

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


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

我希望这有帮助!

关于c# - 使用Microsoft.Web.Administration在IIS7中以编程方式创建远程站点:无效索引。 (来自HRESULT的异常:0x80070585),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19574714/

10-09 15:57