2016-07-10 2 views
0

私はasp.net mvcプロジェクトを作成しました。このプロジェクトでは、私はいくつかのコードを常に実行したい。 Webホスティングサービスでコードを公開します。初めて私のドメインにhttpリクエストを送信することでアプリケーションを開始し、アプリケーションが常に生きていて、決してシャットダウンすることはないと思います。しかし、これは起こりません。継続的に実行するasp.net mvc Webアプリケーションを維持する方法

私のコードで私のドメインにpingをすると、アプリケーションがシャットダウンするのを防ぐことができます。しかし、この溶液を約24時間(常にではない!!!)へのアプリケーションのライフサイクルを延ばすに

ここでは、私のコードは次のとおりです。

public class Main 
{ 
    public static void main() 
    { 
     while (true) 
     { 
      try 
      { 
       // some codes 
      }catch(Exception exp) 
      { 
       // log the exception message, (but any exception hasn't occurred till now 
      } 
     } 
    } 
} 

Global.asaxの:(まもなく、アプリケーションのシャットダウンをこのコードを使用することにより、中私はダミーのコントローラを使用してこの方法)

public class MvcApplication : System.Web.HttpApplication 
{ 
    static Thread keepAliveThread = new Thread(KeepAlive); 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     keepAliveThread.Start(); 
     Main.main(); 
    } 

    protected void Application_End() 
    { 
     keepAliveThread.Abort(); 
    } 

    static void KeepAlive() 
    { 
     while (true) 
     { 
      WebRequest req = WebRequest.Create("http://mydomain/Home/Index"); 
      req.GetResponse(); 

      try 
      { 
       Thread.Sleep(60000); 
      } 
      catch (ThreadAbortException) 
      { 
       break; 
      } 
     } 
    } 
} 

Global.asaxの:(このコードを使用することにより、アプリケーションは約24時間を実行している滞在、このように私は、任意のコントローラを使用していない)

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     Main.main(); 
     Timer timer = new Timer(new TimerCallback(refreshSession)); 
     timer.Change(0, 5 * 60 * 1000); // 5 min 

    } 

    static void refreshSession(object state) 
    { 
     Unirest.get("http://mydomain/"); 
    } 
} 

私の目的に適したソリューションはありますか?はいの場合は、私にサンプルコードを与えてください。

+0

iis設定にアクセスできる場合は、アプリケーションプールの開始モードを常に実行中に変更できます。 – Tavitos

+1

いいえ、私はそれにアクセスしていません、私はホスティングサービスで私のアプリケーションを公開することを言及します –

答えて

3

通常、スケジュール/バックグラウンドジョブと呼ばれます。あなたはグーグルに「予定」を使用することができます。ほとんどのホスティングは、コントロールパネルを構成するための手段を提供しています。紺碧では、例えば "webjobs"を使うことができます。

バックグラウンドジョブのためのいくつかのよく知られた解決策があります。たとえば、hangfireです。あなたが本当にしなければホイールを再発明しないでください。

+2

私の目的のためのファイアアンドフィーチャー機能はソリューションですか?ではない? –

+0

それはなぜアプリを生き生きとしておきたいかによって決まります。要点は、ホスティング環境によって制御されるバックグラウンドサービスは、どのpingよりも信頼性が高いことです。 – Nikolay

+2

この解決策も機能しません。約8時間後にアプリケーションが停止します。 –

関連する問題