2016-07-10 3 views
0

asp.net mvc 프로젝트를 만들었습니다. 이 프로젝트에서 나는 어떤 코드가 항상 실행되기를 원한다. 웹 호스팅 서비스에 코드를 게시합니다. 처음으로 내 도메인에 http 요청을 보내서 응용 프로그램을 시작하고 응용 프로그램이 항상 활성 상태로 유지되고 종료되지 않을 것으로 기대합니다. 그러나 이것은 일어나지 않습니다.지속적으로 실행 asp.net mvc 웹 응용 프로그램을 유지하는 방법

심지어 내 코드에서 내 도메인을 핑 (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

그것은 왜 앱을 계속 사용하고 싶은지에 따라 다릅니다. 요점은 호스팅 환경에 의해 제어되는 백그라운드 서비스가 모든 핑보다 더 신뢰할 수 있다는 것입니다. – Nikolay

+2

이 용액도 효과가 없으며 약 8 시간 후에 도포가 중단됩니다. –