2010-03-23 4 views
5

다른 클라이언트에 배포 할 ASP.Net 응용 프로그램 구성을 관리하는 데 어려움이 있습니다. 트위들 링을 필요로하는 다양한 설정의 엄청난 양은 많은 시간을 필요로하며 현재 구성 방법이 너무 복잡하여 파트너를 지원하기 위해이 책임을 수행 할 수 없습니다.ASP.NET에서 응용 프로그램 구성을 어떻게 관리합니까?

연구를 위해이 좋은 정보원을 다루는 더 좋은 방법에 대한 제안이 있으십니까?

우리가 현재 가지 방법은 다음과 같습니다,있는 Web.Config에서 예를 들어 AppSettings.xml을 참조하는

  • 다양한 XML 설정 파일을.
  • 특정 사이트의 구성은 중복 구성 파일에 보관됩니다. 윈저 IOC에 대한 데이터베이스
  • C#을 구성 사이트 일부의 경우
  • 에 특정 데이터, 수동 일회성 변경의 목록을 포함
  • 텍스트 파일. 우리가 겪고있는

특정 문제 : 서로 다른 기능을 가진

  • 다른 사이트는, 우리가 다른 비즈니스 규칙 얘기를해야 다른 외부 서비스를 사용 가능.
  • 다른 배포 유형 (라이브, 시험, 교육)
  • 구성 키 버전에서 변경은 우리가 모든 중복 파일을 업데이트해야 의미 (제거, 추가됩니다) 우리는 여전히 동안 키를 변경 할 수 있어야합니다
  • 응용 프로그램이 우리가이 문제를 접근하는 방법에

우리의 현재 생각를 실행하고 있습니다

    동적 컴파일 된 코드 (아마도 우우, Binsor 또는 JavaScript)를로 구성을 이동
  • 이/diffing의 구성을 병합 어떤 형태의 유무 : 라이브/시험/훈련 설정과 사이트 별 설정과 기본 설정을 결합
+0

결국 병합 설정 시스템을 사용했습니다. 구성 파일은 트리에 저장됩니다. 키를로드 할 때 먼저 가장 구체적인 버전 (사이트 및 배포 유형)을 찾은 다음 키를 찾을 때까지보다 일반적인 파일을 계속 찾습니다. 이 모든 것을 통해 배워야 할 중요한 점은 소스 제어에서 모든 구성을 관리하는 것이 대단히 도움이된다는 것입니다. – GlennS

답변

0

코드가 구성 항목을 말했다 사용하는 경우는 관리 코드가/변경할 수 있습니다 (그리고 관리되는 코드 공간/C#에서 실행되는 모든) 나는 적어도 GetString() 메소드를 가진 싱글 톤 (singleton)과 같은 클래스로 호출하도록 설정을 가져 오는 메소드 호출을 이식하는 방법을 모색 할 것이다.

GetObject()는 매우 유용 할 수 있습니다. (닷넷 XML 직렬화 작업 - 미국인이 'z': serialization으로 철자를 ...) ... 많은 것들에 유용하지만 포장을 시작할 수 있다는 것을 의미하기 때문에 관련 구성 항목을 저장소의 단일 항목으로 통합합니다.

단일 저장소 (캐시 된 액세스 권한이있는 데이터베이스 테이블)를 사용하거나 구성 구성 항목이 저장되는 위치를 캡슐화하기 위해 새 구성 facade 만 사용하십시오. 이는 귀하에게 달려 있습니다 ... 제품 배포 당 하나의 저장소 왜냐하면 당신은 언제 어디서 볼 것인지, 어디에서 수정해야하는지 정확히 알기 때문에 구성을위한 것입니다. 모든 웹 서비스 참조 (WCF 또는 기타)는 constucted 될 수 있으며 런타임 제공 문자열을 사용하여 호출 할 수 있습니다.:)

키 값 캐싱 측면에서 - 스택의 오버 헤드가 관리하기 쉽기 때문에 메모리 캐시에 내 자신을 사용합니다 ... memcache와 같은 기능이 여기에서 작동 할 수 있습니다 (TCP를 통해 구성 저장소에 액세스 함)./네트워크 곳) ...

EDIT 같은 뭔가에 : 당신은 설정 키를 조작하는 일부 사용자 지정 .NET 유틸리티와 결합 된 자동화은 NAnt 스크립트를보고 고려할 수

public class ConfigurationStore 
{ 
    private static ConfigurationStore _instance = null; 

    public static ConfigurationStore Instance { 
     get { 
     if(_instance == null) 
     { 
      _instance = new ConfigurationStore(); 
     } 

     return _instance; 
     } 
    } 

    public string GetValue(string key) 
    { 
     .... 
    } 

    public Object GetObject(string key) 
    { 
     ... 
    } 
} 
0

.

2

어느 쪽을 선택하든 구성에 대한 단일 "진실"의 개념을 갖는 것이 중요 할 수 있다고 생각합니다.

일부 구성 요소에 고유 한 형식으로 구성을 제공해야하는 경우 복제가 좋습니다.

당신의 온전함을 유지하기 위해 응용 프로그램과 관련된 모든 구성을 설정하는 한 곳을 목표로해야한다고 생각합니다. 그런 다음이를 Web.config 내의 항목으로 변환하기위한 잘 정의 된 메커니즘과 지원해야하는 다른 구성 메커니즘

지원 파트너의 기술 수준에 따라 (XML 중단 여부와 상관없이) GUI 유틸리티를 제공하여이 "진원지"구성의 모든 손잡이를 돌릴 수 있습니다. 파일을 "적용"하고 Web.config & 친구에게 필요한 변경 사항을 적용하기 위해 변환/업데이트 코드를 실행합니다.

다른 사이트/고객에 대한 구성을 관리하려면 이론적으로 관리 할 구성 파일이 하나 주위에 있어야합니다.

참고 : ASP.NET 4.0에서 빌드 타임 구성 변환 메커니즘을 사용할 수 있습니다 (http://blog.hmobius.com/post/2010/02/17/ASPNET-40-Part-4-Config-Transformation-Files.aspx 참조).이 작업을 쉽게 수행 할 수 있습니다. 웹 프로젝트가 아닌 웹 프로젝트에서 이것을 사용할 수있는 것으로 보입니다 (http://philbolduc.blogspot.com/2010/03/using-config-transforms-outside-web.html 참조).

그러나 배포 할 때 이러한 변경 작업을 수행해야하는 경우 XDT 변환이 사용자를 대신 할 수있는 것처럼 보이지만 사용자 지정 도구를 작성하는 데 어려움이있을 수 있습니다. 항목을 추가/업데이트/제거 할 수 있습니다.

관련 문제