如何以编程方式停止当前网站?

时间:2015-04-24 09:15:55

标签: asp.net asp.net-mvc asp.net-mvc-5 .net-4.5 global-asax

我正在将MVC5用于Web应用程序。 Web应用程序在IIS7或更高版本中运行。

application_start上的Global.asax中,将设置许可证数量:

protected void Application_Start()
{
    try
    {
        MyApp.cNumberOfLicenses = COM.GetNumberOfLicenses();
    }
    catch(Exception e)
    {
        // log exception
        // stop web site.
    }
}

如果在此上下文中引发任何预期,则应该在IIS管理器中关闭该网站:

enter image description here

如何在我的Application_Start停止当前网站?

3 个答案:

答案 0 :(得分:1)

您可以在" Microsoft.Web.Administration.dll"

的帮助下完成此操作
using Microsoft.Web.Administration;

添加" Microsoft.Web.Administration.dll"的引用后在Global.asax中写下以下代码

  protected void Application_Start(object sender, EventArgs e)
        {
            try
            {
                MyApp.cNumberOfLicenses = COM.GetNumberOfLicenses();
            }
            catch (Exception e)
            {
                // get the web site name
                var lWebSiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();

                // log exception
                // stop web site.
                using (ServerManager smg = new ServerManager())
                {
                    var site = smg.Sites.FirstOrDefault(s => s.Name == lWebSiteName);
                    if (site != null)
                    {
                        //stop the site...
                        site.Stop();
                    }
                }
            }
        }

答案 1 :(得分:1)

我不会停止它,但如果您没有许可证,则显示一些信息。

这是一个例子和想法。

您可以在global.asax上使用此代码,如果您在开始时没有许可证,则打开一个标记,之后您不允许显示任何页面,并且您发送的页面是可以保留一个html文件。

private static bool fGotLicense = true;

protected void Application_Start()
{
    try
    {
        MyApp.cNumberOfLicenses = COM.GetNumberOfLicenses();
    }
    catch(Exception e)
    {
        // log exception
        // stop web site.
        fGotLicense = false;
    }
}

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;

    // if not have license - let show some infos
    if (!fGotLicens)
    {
        // the file we look now is the app_offline_alt.htm
        string cOffLineFile = HttpRuntime.AppDomainAppPath + "app_offline_alt.htm";

        // if exist on root
        if (System.IO.File.Exists(cOffLineFile))
        {
            using (var fp = System.IO.File.OpenText(cOffLineFile))
            {
                // read it and send it to the browser
                app.Response.Write(fp.ReadToEnd());
                fp.Close();
            }    
        }

       // and stop the rest of processing
       app.Response.End();
       return;
    }
}

答案 2 :(得分:0)

您可以在网络服务器中找到一个名为app_offline.htm且内容为This website is offline now的文件,并将其复制到您想要参加任何活动的网站的根目录。

它将直接显示该消息,但是,应用程序池仍将打开,当您需要启动时,您只需要将其重命名为其他内容。