요청한 내용을 처리하는 여러 가지 방법과 질문에 대한 몇 가지 다른 측면이 있습니다.
프로모션을위한 작은 업데이트 처리
실제로 여기에 오는 것은 컨텐츠 관리 시스템 또는 이와 유사한 것이므로 즉시 편집 할 수 있습니다 (Wordpress / Drupal 또는 .NET 관점 N2 CMS, Umbraco, Orchard 등). 그 길을 따라 가지 않았다면 시도해 볼 수있는 것들이 있습니다.
ASP.NET은 특정 유형의 파일 (web.config (s), 주로 폴더 /bin/
및 /app_code/
폴더 의 내용)을 터치하는 경우에만 실제로 다시로드되므로 "기타 파일 변경"에 대한 구성 가능한 제한이 있습니다 (기본적으로 수정 한 후에는 사이트 내 많은 파일이 응용 프로그램 풀에서 다시 시작됩니다.- 필요에 따라 가져 와서 표시하는 NumRecompilesBeforeAppRestart
정적 .html
파일 (예 :)에 대해 다른 폴더를 검사 하거나 LoadControl
문자열 경로를 사용하는 방법을 활용하는 작업 을 수행 할 수 있습니다. .ascx
사용자 제어 및 동적으로로드합니다 - 당신이 쇼에 다른 질문이 더 적합에 StackOverflow에 대한인지를 결정하는 방법은 - 그러나 나는 명명 규칙 기반 솔루션을 권하고 싶습니다.
플러그인 기반 아키텍처를 작성하고 디렉토리 외부에서 폴더를 지정 하여 모니터링 할 수 있는 Managed Extensibility Framework (MEF-버전 4 이후 .NET 프레임 워크의 전체 부분 임) 와 같은 것을 사용하여 조사 할 수도 있습니다. /bin/
새로운 .DLL-앱 다시 시작 문제를 피할 수 있는지 확인하지는 않았지만 웹 환경에서 사이트에 공통 기능을 추가하는 데 효과적이었습니다.
그것이 호소력이 없다면, 내가 생각할 수있는 유일한 다른 옵션은 클래식 ASP에서와 같이 컨트롤을 "전면 코드"로 추가하는 것입니다. 즉 <script runat="server">
컴파일 된 "코드 숨김"클래스 대신 블록이 있습니다. 컨트롤을 실행하는 논리가 포함되어 있습니다-컨트롤이 즉시 컴파일 될 때 처음으로 성능이 저하되는 대신 DLL 변경이 필요 NumRecompilesBeforeAppRestart
하지 않습니다. 작은 변화를 많이하고 있습니다.
앱을 다시 시작할 때 세션을 어떻게 유지합니까?
이는 해결하기 쉬운 문제 일 수 있으며 다음 세 가지 주요 단계가 포함됩니다.
- MachineKey (IIS7이지만 여전히 8을 유지) 를 일정한 값으로 구성
AutoGenerate
하십시오. 이는 AppPool이 재활용 될 때 동일한 키를 사용하므로 이전부터 세션 쿠키, viewstate 등을 해독 할 수 있음을 의미합니다. 재활용.
- 어느 설치 국가 서버 또는 세션 상태를 저장하기위한 데이터베이스를 구성합니다 .
- web.config에서 SessionState 요소 를 사용 하거나 사용하지
InProc
않도록 전환 합니다.StateServer
SQLServer
이렇게하면 앱을 다시 시작한 후에도 지속되는 영구 세션이 생깁니다. 그러나 이것들은 "무료"가 아닙니다. 세션에 저장 한 모든 것은 직렬화 할 수 있어야하며, 각 페이지로드에 이제 추가 네트워크 트립이 필요하고 세션 데이터를 공개해야하기 때문에 약간의 성능 저하가 발생합니다.
그러나 배포 후 응용 프로그램을 다시 시작하는 데 "몇 분"이 걸리는 위치에 있으면로드 균형 조정 환경으로 이동하거나 최소한 핫 스왑 가능한 준비 / 라이브 설정으로 이동하는 것이 좋습니다 (Azure / AWS / etc에서 제공하는 것과 같은)-이 방법으로 서버를 업데이트하는 동안 서버를 오프라인 상태로 만들거나 새 코드로 준비한 다음 스왑 할 수 있습니다-공유 주소 지정 단계를 수행 한 경우 세션 (위 참조)은 사용자에게 영향을 미치지 않고 정상적으로 작동합니다.