我正在尝试为我们的Web应用程序编写一个配置工具。我正在尝试使用 Microsoft.Web.Administration.ServerManager 在 IIS7.5 中远程创建网站。
法典:
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。
解决此问题的帮助将不胜感激。
谢谢
在一个非常大的、受到严格监管的公司网络上使用连接到目标服务器的远程 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证明该网站已创建。
我希望这有帮助!