2012-05-27 5 views
1

이제 ASP.NET MVC 응용 프로그램이 하나 있습니다. 나는 (TCP/IP에 의해) 외부 Windows 데스크탑 (광산 아님) 응용 프로그램에서 데이터를 검색하는 ASP.NET MVC 응용 프로그램에서 여러 가지 방법을 가지고 있습니다. 그리고 이제이 방법을 외부 서비스 (프로그램)로 이동하고 다른 방법 (전자 메일 메시지와 다른 프로세스를 별도의 스레드에서 실행)을 전달하려고합니다. 이것은 웹 서비스/wcf에 대한 나의 첫 번째 경험입니다. 그리고 wcf, 웹 서비스, 서비스를이기는 더 좋은 방법은 무엇입니까?
감사내 작업에 가장 적합한 선택 (wcf, web-service, win service)

상세 정보 :
ASP.NET MVC 응용 프로그램에서 나는 (TCP/IP에 의한) 외부 바탕 화면 (안 내) 응용 프로그램에서 다양한 정보를 얻을 수 있습니다. 예를 들어,이 프로그램에서는 영화, 스포츠, 극장 및 일정에 대한 이벤트를 만듭니다. 또한, 특정 세션과 다른 세션을 위해 얼마나 많은 좌석이 남아 있습니다.
다양한 유형의 정보를 다양한 방법으로 얻을 수 있습니다. 때로는 업데이트가 있음을 매분 확인합니다 (이벤트 목록, 스케줄). 때로는 카싱 (cahcing)을위한 다른 정보를 얻으려고 분당해야합니다 (얼마나 많은 좌석이 세션을 위해 남았는지). 따라서 많은 작업이 별도의 스레드와 접근법으로 수행됩니다. 나는 다음과 같은 접근하여 외부 윈 프로그램에서 업데이트를

:

ThreadPool.QueueUserWorkItem(new WaitCallback(SendEmailInSeparateThread), senderInfo); 

: 또한

protected void Application_Start() 
{ 
    AddTask("UpdateFromExternalProgram", "60", 60); 
} 

private static CacheItemRemovedCallback _onCacheRemove = null; 
public static void AddTask(string name, string value,int seconds) 
{ 
    _onCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); 
    HttpRuntime.Cache.Insert(name, value, null, 
         DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, 
         CacheItemPriority.NotRemovable, _onCacheRemove); 
} 

    private static void CacheItemRemoved(string key, object value, CacheItemRemovedReason reason) 
    { 
     if (reason == CacheItemRemovedReason.Expired) 
     {    
       AddTask(key, value.ToString(), Convert.ToInt32(value)); 
       GetUpdatesFromExternalProgram();    
     } 
    } 
private static void GetUpdatesFromPremiera() 
{ 
    //creates TCP/IP client, send request, and parse response 
} 

는 별도의 스레드에서 사이트 (등록, 피드백, 기타 정보)에 모든 이메일을 전송 그리고이 기능을 다른 앱 : wcf, 웹 서비스 또는 윈 서비스로 옮기고 싶습니다.

답변

2

ASP.NET 응용 프로그램의 경우 avoid implementing recurring background tasks이어야합니다. 이 기능을 구현하는 데 Windows 서비스가 더 적합합니다.

+0

Windows 서비스가 웹 서비스가 아닌 이유는 무엇입니까? 단점과 단점은 무엇입니까? – user1260827

+0

웹 서비스 유형에 따라 다릅니다. 그러나 IIS (고전 ASMX 또는 IIS 호스팅 WCF 서비스)에서이 웹 서비스를 호스팅하는 경우 ASP.NET 응용 프로그램을 사용하고 있습니다. 이 경우 Phil Haack의 기사에서 ASP.NET 응용 프로그램에서 반복되는 백그라운드 작업을 구현하는 것이 왜 안 좋은지 읽어보십시오. IIS는 언제든지이 ASP.NET 응용 프로그램을 재생하여 모든 작업을 중지하고 모든 스레드를 종료 할 수 있습니다. –

관련 문제