문제

web.config(또는 우리의 경우 appsettings 노드가 포함된 application.config 파일)를 변경하지 않고도 애플리케이션을 더 확장 가능하고 조작하기 쉽게 만드는 방법을 찾고 있습니다.

제가 생각한 한 가지 방법은 sqlcachedependent가 있는 데이터베이스 테이블에 앱 설정을 유지하는 것입니다.이는 다음을 의미합니다.

  • 데이터베이스에서 설정이 변경될 때마다 캐시가 무효화되고 설정이 다시 검색되므로 파일을 변경하고 전체 앱을 다시 시작할 필요 없이 실시간으로 애플리케이션이 업데이트됩니다.
  • 설정을 변경할 수 있는 사용자 정의 도구를 만들 수 있습니다.

내가 보기에 단점은 이것이 심각한 논리 문제를 일으킬 수 있다는 것입니다. 프로세스 시작 시 앱 설정을 확인하는 것이 있고 중간에 변경되는 경우 의도치 않게 프로세스 흐름이 변경될 수 있습니다. 전체 애플리케이션을 다시 시작하기 위한 요구 사항이 무효화됩니다.

이 문제를 해결할 수 있는 방법이 있나요?

앱 설정을 관리하여 하나, 여러 서버 또는 모든 서버에 대해 원격으로 즉시 변경할 수 있는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 두 주요 선수를 못 박았다고 생각합니다.

  • 파일 시스템에 액세스 할 수 있고 모든 설정을 plethora *.config 파일에 넣습니다.

또는:

  • 서버의 파일 시스템에 대한 액세스 (또는 매우 제한된 액세스)가 없으므로 데이터베이스에 구성 설정 및 사용자 기본 설정을 넣는 것이 좋습니다. 기본적으로 디스크의 구성 파일에 연결 문자열 만 남기지 않습니다.

두 가지 접근법 모두 장단점이 있습니다. 데이터베이스 필드에서 구성 섹션을 "구체화"하는 방법을 찾기 위해 오랫동안 노력해 왔으며 기본적으로 구성 XML을 사용할 수 있지만 데이터베이스 필드에 저장할 수 있습니다. 불행히도, 전체 .NET 2.0 구성 시스템은 매우 "잠금"되었으며 데이터 만 파일에서 나올 것이라고 가정합니다. 예를 들어 데이터베이스 공급자를 연결하여 구성 시스템이 데이터베이스 필드에서 내용을 읽을 수 있도록 할 수있는 방법이 없습니다. -(정말 나쁘다!

내가 본 유일한 다른 접근법은 StockTrader 2.0 샘플 앱 Microsoft가 제공하지만 내 필요에 따라 과도하게 과도한 느낌이 들었고 정말 복잡하고 무거운 가중 하위 시스템처럼 느껴졌습니다.

다른 팁

~할 수 있었다 단일 파일의 자체 포함 된 DB가 될 SQLITE를 사용하십시오. 하나의 돌을 가진 두 마리의 새?

appsettings가 포함된 외부 구성 파일을 참조하는 경우(다른 모든 항목은 일반 app.config에 그대로 두고) 이를 편집하면 해당 설정만 다시 로드될 뿐 전체 앱이 강제로 다시 시작되지는 않습니다.

여기에 주제에 대한 비슷한 질문이 있습니다.중첩된 app.config(web.config) 파일

프로그램 실행 중에 값이 변경되는 문제에 대해 WRT를 생각하면 로컬에서 값을 캐시하고 값이 변경될 때 이벤트를 발생시켜 업데이트된 값을 사용하기 전에 루틴이 적절한 지점에 도달할 수 있을 것 같습니다.

내 생각에 asp.net에서는 각 페이지 수명 주기가 다르기 때문에 이것을 무료로 얻을 수 있다고 생각합니다. 따라서 값은 실행 도중이 아닌 새 페이지 요청에만 적용됩니다.

편집하다:약간의 추가 정보:

구성 변경으로 인해 애플리케이션 도메인이 다시 시작됩니다.

에서 MSDN:

Web.config 파일의 구성 설정을 변경하면 애플리케이션 도메인이 간접적으로 다시 시작됩니다.이 동작은 의도적으로 발생합니다.선택적으로 configSource 속성을 사용하여 변경 시 다시 시작되지 않는 외부 구성 파일을 참조할 수 있습니다.자세한 내용은 섹션 요소에 의해 상속되는 일반 특성의 configSource를 참조하세요.

자세한 내용은 ConfigurationManager 클래스 에서 System.Configuration 네임스페이스 프로그래밍 방식으로 구성 파일을 수정하는 데 사용할 수 있습니다(예: 관련 디스크 읽기 권한이 제공될 수 있는 경우 사용자 지정 도구에서).내장된 구성 클래스를 계속 사용하는 경우 외부 구성을 변경해도 애플리케이션이 다시 시작되지는 않지만 이벤트(예: 속성이 변경됨) 설정을 변경하여 코드가 포착되지 않도록 처리할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top