2011-09-30 4 views
2

먼저 시나리오를 설명하겠습니다.app.config를 사용하여 섀도 복사본 구성

단일 설치 기반에서 여러 개의 서비스 사본 (설치 10 개)을 설치했습니다. 이제 dll 중 하나를 업데이트하고 싶습니다. 모든 서비스를 중지하고 dll을 업데이트 한 다음 서비스를 다시 시작해야합니다.

상황을 피하려면 코드에서 ShadowCopying을 사용했습니다. 그래서 모든 서비스를 중단하지 않고 dll을 업데이트 할 수 있습니다. 그것은 다음과 같습니다. 다음과 같이

static void Main(string[] args) 
{ 
    AppDomain.CurrentDomain.SetCachePath(@"C:\Cache"); 
    AppDomain.CurrentDomain.SetShadowCopyPath(AppDomain.CurrentDomain.BaseDirectory); 
    AppDomain.CurrentDomain.SetShadowCopyFiles(); 

    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
     { 
      new SampleService(serviceName) 
     }; 
    ServiceBase.Run(ServicesToRun); 
} 

는 지금은 Asp.Net

<hostingEnvironment 
    idleTimeout="Infinite" 
    shutdownTimeout="30" 
    shadowCopyBinAssemblies="true" /> 

어떤 제안이에서, app.config 파일을 통해이를 달성하기 위해 노력하고 있어요?

+0

당신은 전혀 문제에 대해 말하지 않았습니다. 문제가 있습니까? 우리가 당신의 코드를 시험해 보지 말고 우리가 문제에 대해 이야기하게하십시오. – Zenwalker

+0

ASP.net에서 한 것처럼 Config 파일 만 사용하여 섀도 복사본을 구현하려고합니다. 코드에서 응용 프로그램 도메인을 만들지 않고 ... 막혔습니다 ... – Vivasaayi

답변

2

ASP.Net 호스팅 환경에는 응용 프로그램 재활용 관리를위한 내장 지원 기능이 있습니다.

Windows .Net 서비스는이 지원이없는 표준 CLR 호스트를 사용합니다. 예를 들어 직접 구현해야합니다.

  1. AppDomain을 작성하여 서비스 코드를 호스트하고 섀도 복사를 구성하십시오.
  2. 원래 bin 디렉토리를 모니터하려면 FileSystemWatcher과 같은 것을 사용하십시오.
  3. 파일이 변경되면 AppDomain을 분해하고 새 파일을 만들고 다시로드하십시오.

ASP.Net 호스트는 이러한 행을 따라 처리하지만 기존 요청을 관리하고 새로운 요청을 대기열에 넣을 수 있습니다.

관련 문제