2008-09-18 1 views
11

ASP.Net 응용 프로그램 배포의 경우 어떤 유형의 정보 (있는 경우)를 machine.config에 저장 하시겠습니까?Machine.config를 어떻게 사용하고 있습니까? 그렇지 않습니까?

환경을 변경하는 환경 별 구성 설정을 어떻게 관리하고 있습니까?

나는 "모범 사례"와 각 이점/함정을 찾고 있습니다. 우리는 2 개월 만에 새로운 애플리케이션을 프로덕션에 배치하려고합니다. 이러한 유형의 결정에는 약간의 위도가 있습니다. 가능한 한 최선의 방법으로 접근하고 있는지 확인하고 나중에 촬영하는 것을 피하려고합니다.

FYI 우리는 현재 DB 연결 정보와 데이터베이스의 구성 테이블에서 변경 될 수있는 다른 모든 변수를 저장하기 위해 (machine.config)를 사용하고 있습니다.

답변

8

우리는 machine.config를 사용하여 환경에 대한 하나의 키를 추가 한 다음 모든 환경에서 동일하게 적용되는 web.config에 하나의 섹션을 포함하는 것을 고려하고 있습니다. 이렇게하면 "실제"XCopy 배포를 수행 할 수 있습니다.

예.

<appSettings> 
    <add key="Environment" value="Staging"/> 
</appSettings> 

그런 다음, 환경 관련있는 모든 구성 요소가 환경을 가져옵니다 모든 컴퓨터의 machine.config에에 (지역 dev에 워크 스테이션, 무대 서버, 서버, 프로덕션 서버를 구축), 우리는이 다음 추가 할 것 과 같이, 추가 : 우리가 해결책이없는

<connectionStrings> 
    <add name="Customers.Staging" provider="..." connectionString="..."/> 
</connectionStrings> 
<appSettings> 
    <add key="NTDomain.Staging" value="test.mydomain.com"/> 
</appSettings> 

하나의 문제는 환경을 디버깅이 아닌 실제 환경에 대한 Web.config의 추적을 말할 수 있도록하는 방법이다.

또 다른 문제점은 라이브 연결 스트링을 포함한다는 것입니다. 사용자 이름과 암호가 이제 소스 제어 시스템에 있습니다. 그러나 이것은 우리에게 문제가되지 않습니다.

+1

5 년 이상이 작업을 수행했습니다. 굉장합니다. – Portman

2

ASP.NET뿐만 아니라 전반적인 구성에서도 machine.config를 사용합니다. C#에서 해시 알고리즘 (Tiger)을 구현했으며 컴퓨터 요청을 통해 사용 가능하게하려고했습니다. 그래서, GAC에 내 어셈블리를 등록은 Machine.config하려면 다음을 추가 :

using (var h1 = HashAlgorithm.Create("Tiger192")) 
{ 
    ... 
} 

을하고 Jcs.Tiger에 대한 종속성이 없습니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <mscorlib> 
     <cryptographySettings> 
      <cryptoNameMapping> 
       <cryptoClasses> 
        <cryptoClass Tiger192="Jcs.Tiger.Tiger192, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
        <cryptoClass Tiger160="Jcs.Tiger.Tiger160, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
        <cryptoClass Tiger128="Jcs.Tiger.Tiger128, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
       </cryptoClasses> 
       <nameEntry name="Tiger" class="Tiger192"/> 
       <nameEntry name="TigerFull" class="Tiger192"/> 
       <nameEntry name="Tiger192" class="Tiger192"/> 
       <nameEntry name="Tiger160" class="Tiger160"/> 
       <nameEntry name="Tiger128" class="Tiger128"/> 
       <nameEntry name="System.Security.Cryptography.HashAlgorithm" class="Tiger192"/> 
      </cryptoNameMapping> 
      <oidMap> 
       <oidEntry OID="1.3.6.1.4.1.11591.12.2" name="Jcs.Tiger.Tiger192"/> 
      </oidMap> 
     </cryptographySettings> 
    </mscorlib> 
</configuration> 

이 내 코드는 지금과 같이 할 수 있습니다. 내 코드에서 dll 어셈블리, 하드 또는 소프트.

5

프로덕션 서버에서 machine.config를 사용하여 프로덕션 환경에서 중요한 특정 구성을 설정/제거하고 설정을 잊지 않을 것입니다.

는이 가장 중요한 : 당신이 당신의 서버의 부하를 분산하는 경우

<system.web> 
    <deployment retail="true" /> 
    <healthMonitoring enabled="true" /> 
</system.web> 
7

, 당신은 절대적으로 확인 시스템 키는 모든 서버에서 동일해야한다. Viewstate는 서버에 무관 한 것으로되어 있지만 그렇지 않습니다. 따라서 컴퓨터 키가 서버간에 동일하지 않으면 Viewstate 손상 오류가 발생합니다.

<machineKey validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0 
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9' 
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/> 

은에서 : 확인 http://www.c-sharpcorner.com/UploadFile/gopenath/Page107182007032219AM/Page1.aspx

PS 당신의 enableViewStateMac = "false"를, 그러나 할 수 있습니다.

관련 문제