我正在寻找一种方法来重启当前正在运行的网站(来自管理页面) 来自MVC控制器,使用C#.NET
为什么我需要它? 我在网站上有一个错误,但它只发生在网站运行一段随机的时间之后才真正难以找到, 同时,如果需要的话,我还需要一种远程方法从手机快速重启网站。
答案 0 :(得分:3)
创建.bat文件名IISresart.bat
并在其中写下
iisreset
iisreset停止然后启动IIS。
ASP.net我写了
string str_Path = Server.MapPath(".") + "\\IISresart.bat";
ProcessStartInfo processInfo = new ProcessStartInfo(str_Path);
processInfo.UseShellExecute = false;
Process batchProcess = new Process();
batchProcess.StartInfo = processInfo;
batchProcess.Start();
它重新启动IIS。
注意。我在asp.net网络表单上测试过。我也应该在MVC上工作。 并且对于没有窗口添加此行 processInfo.CreateNoWindow = true;
答案 1 :(得分:3)
我想从注册应用程序注销所有用户时使用的一个非常简单的解决方案是从bin文件夹中创建/删除(如果存在)虚拟.dll文件。
你可以随心所欲地命名这个dll文件但是通过创建/删除它将重启整个应用程序(池)并修复你的问题..
此解决方案的优点在于您不需要对Web应用程序具有特殊权限。
答案 2 :(得分:3)
ASP.NET应用程序可能会重启,因为真的有很多原因。它 可能比你想象的更频繁地发生。 ASP.NET Web应用程序 将因以下原因重启:
- 更改Web.Config文件。更改任何参数,添加空格字符甚至更改文件的修改日期都将导致应用 重新启动。
- 更改machine.config,就像web.config一样。
- 更改/ bin文件夹。如果您添加,更新或删除/ bin文件夹中的任何文件,应用程序将重新启动。
- App_Code文件夹中的更改。在App_Code中添加,删除或编辑类将导致应用程序重新启动。
- 更改Global.asax文件,例如在web.config中。
- App_LocalResources文件夹中的更改
- App_GlobalResources文件夹中的更改
- App_WebReferences文件夹中的更改
- 更改配置文件配置
- 达到编译限制,使用machine.config文件中的numRecompilesBeforeAppRestart定义。默认值为15. ASP.NET监视文件中的任何更改。当更改某个数字(默认为15个)文件时,将重新启动Web应用程序 自动。这样做的原因是为了节省服务器上的内存。上 一些动态生成文件的网站,这可能会导致 频繁重启。
- 防病毒软件会更改文件的修改日期。防病毒程序会扫描Web.config或Global.asax等文件。一些防病毒程序 更改这些文件的修改日期,这会导致非常频繁 重启,这会降低网站的表现。
- IIS重新启动,所有网站也将重新启动。
- 更改Web应用程序的物理路径
- IIS由于不活动而回收网站(默认为20分钟)。如果网站没有访问者,IIS将从内存中卸载以保存 资源。申请将在下次访客时再次启动 来了。
这是我通常会重启应用程序的操作。
从代码中调用UnloadAppDomain
,但需要完全信任权限才能执行此操作。
System.Web.HttpRuntime.UnloadAppDomain()
故意更改gloabl.asax或web.config文件修改日期属性
File.SetLastWriteTimeUtc(MapPath("~/global.asax"), DateTime.UtcNow);
File.SetLastWriteTimeUtc(MapPath("~/web.config"), DateTime.UtcNow);
答案 3 :(得分:0)
另一个选择是终止w3wp进程。我不需要我的控制器的任何其他权限即可运行以下命令:
var powershellCommand = @"get-process w3wp | stop-process";
var procInfo = new ProcessStartInfo("powershell")
{
Arguments = $"/c {powershellCommand}",
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false
};
var p = Process.Start(procInfo);