我编写了一个程序,该程序接受主机名和站点名称的列表,并将它们添加为站点的绑定(bind)(如果它们在任何站点上均不存在)。该程序是用.NET 4.0 C#编写的。
在本地(IIS 7.5,Win 7),下面的代码可以正常工作。它检测绑定(bind)并退出。在我的服务器(IIS 7.0,Win Server 2008)上,检查失败,并且始终添加绑定(bind)。是什么赋予了?
是LINQ查询错误还是Microsoft.Web.Administration库在处理IIS 7.0方面存在一些根本性的不足?
这是应该在两台计算机上都可以使用的部分代码:
ServerManager oIisMgr = new ServerManager();
Site oSite = oIisMgr.Sites[siteName];
string sBindInfo = ":80:" + this.StripUrl(hostName);
//See if this binding is already on some site
if (oIisMgr.Sites
.Where(ST => ST.Bindings.Where(B => B.BindingInformation == sBindInfo).Any())
.Any()) return true;
Binding oBinding = oSite.Bindings.CreateElement();
oBinding.Protocol = "http";
oBinding.BindingInformation = sBindInfo;
oSite.Bindings.Add(oBinding);
oIisMgr.CommitChanges();
最佳答案
作为记录,我发现了我的错误。默认情况下,通过IIS管理控制台添加的将“IP地址:”设置为的网站绑定(bind)赋予此绑定(bind)字符串:所有未分配的。
“*:80:some.domain.com”
我在代码中使用了这个:
“:80:some.domain.com”//注意缺少的通配符
绑定(bind)有效,但是由于我正在查询主机名绑定(bind)信息的无通配符版本,因此我的LINQ查询未将通过管理器设置的绑定(bind)记录为完全相同。