添加新绑定时,IIS 8.5会循环使用

时间:2013-11-15 09:35:36

标签: c# asp.net .net iis recycle

我正在尝试使用ServerManager类向IIS 8.5添加绑定,但它总是导致应用程序重新启动。该站点在IIS 8.5上运行,运行ASP.NET 4.5并配置为以集成模式运行。以前,当我的开发人员机器运行Windows 7并且我们使用的是Asp.Net 3.5时,这种情况并没有发生。我希望能够在没有重新启动应用程序的情况下添加新绑定。这是代码的一部分。调用CommitChanges()方法时会发生循环,但如果没有它,则不会添加绑定。 回收据说是因为配置更改,但我将AppPool的“禁用回收配置更改”设置为True,我希望这会阻止此行为。


从Global.Application_End()记录stacktrace告诉我:

  

_shutDownMessage = IIS配置更改HostingEnvironment启动关闭HostingEnvironment导致关机

     

_shutDownStack =在System.Environment.get_StackTrace()处的System.Environment.GetStackTrace(Exception e,Boolean needFileInfo)处   System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()at   System.Web.Hosting.PipelineRuntime.StopProcessing()


using (ServerManager mgr = new ServerManager())
{
   foreach (var site in mgr.Sites)
   {
      if (Convert.ToString(site.Name.ToLowerInvariant()) == siteName)
      {
         bool bindingExists = false;
         foreach (var binding1 in site.Bindings)
         {
            if (binding1.Host == domainName &&
                 Convert.ToString(binding1.EndPoint.Port) == portNo)
            {
                 bindingExists = true;
                 result = true;
                 break;
            }
         }
         if (!bindingExists)
         {
            string bind = "*:" + portNo + ":" + domainName;
            Binding binding = site.Bindings.CreateElement();
            binding.Protocol = "http";
            binding.BindingInformation = bind;
            site.Bindings.Add(binding);
            mgr.CommitChanges();
            result = true;
         }
         break;
      }
   }

}

1 个答案:

答案 0 :(得分:0)

网站绑定存储在\Windows\System32\InetSrv\Config\applicationHost.config中。对此文件的更改会全局影响IIS - 应用程序池设置不相关。

AFAIK在更改网站级设置时,无法阻止IIS回收您的应用池。实际上,applicationHost.config中有许多设置可能会导致您的应用池回收。

这只是事物的本质。