3

ServerManager クラスを使用して IIS 8.5 にバインドを追加しようとしていますが、常にアプリケーションが再起動します。このサイトは、ASP.NET 4.5 を実行する IIS 8.5 で実行されており、統合モードで実行するように構成されています。以前、私の開発者マシンが Windows 7 を実行していて、Asp.Net 3.5 を使用していたとき、これは起こりませんでした。アプリケーションを再起動せずに新しいバインディングを追加できるようにしたいです。これがコードの一部です。CommitChanges() メソッドが呼び出されるとリサイクルが発生しますが、それがなければバインディングは追加されません。リサイクルは構成の変更が原因と言われていますが、AppPool の「構成変更のリサイクルを無効にする」を True に設定しているため、この動作を防ぐことができます。


Global.Application_End() からスタックトレースをログに記録すると、次のことがわかります。

_shutDownMessage=IIS 構成の変更 HostingEnvironment がシャットダウンを開始しました HostingEnvironment がシャットダウンを引き起こしました

_shutDownStack= で System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) で System.Environment.get_StackTrace() で System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal() で 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;
      }
   }

}
4

1 に答える 1

1

サイト バインディングは に格納され\Windows\System32\InetSrv\Config\applicationHost.configます。このファイルへの変更は、IIS にグローバルに影響します。アプリケーション プールの設定は関係ありません。

私の知る限り、サイトレベルの設定を変更したときに IIS がアプリ プールをリサイクルするのを防ぐ方法はありません。実際、applicationHost.config には、アプリケーション プールのリサイクルを引き起こす可能性のある多くの設定があります。

それは物事の性質です。

于 2015-06-12T23:54:20.860 に答える