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;
}
}
}