2012-07-18 11 views
5

web.config (또는 app.config)에서 구성 설정을 보유 할 때 Windows Azure를 사용하여 응용 프로그램 구성을 변경할 수있는 방법을 알 수 없습니다. 예를 들어Azure 역할 구성 관리

...

는 종종 프로젝트의 web.config를 많이 사용하게 제 3 자 라이브러리를 사용하게됩니다. web.config를 사용하려면 연결 문자열, 응용 프로그램 설정 또는 사용자 정의 구성 섹션이 필요할 수 있습니다. 좋은 예가 ELMAH입니다.

  • 저를 업데이트하거나 원격 액세스를 사용할 수 있는지 여부를 다를 ​​수있는 방법은 없습니다 : 여기에 몇 가지 문제가

    <configuration> 
    
        <configSections> 
        <sectionGroup name="elmah"> 
         <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> 
         <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> 
        </sectionGroup> 
        </configSections> 
    
        <connectionStrings> 
        <add 
         name="MyElmahDatabase" 
         providerName="System.Data.SqlClient" 
         connectionString="Server=tcp:myServer.database.windows.net,1433;Database=myDB;User [email protected];Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" /> 
        </connectionStrings> 
    
        <elmah> 
        <security allowRemoteAccess="1" /> 
        <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyElmahDatabase" /> 
        </elmah> 
    
    </configuration> 
    

    있습니다 ELMAH에 대한 web.config 파일은 다음과 같이 보일 수 있습니다 서비스 구성 간.

  • 서비스 구성간에 ELMAH 연결 문자열을 업데이트하거나 변경할 방법이 없습니다. Web.config의이 .cspkg 파일로하고 ELMAH는 (I 서비스 구성과 구성 설정을 변경할 수있는 유일한 방법입니다) 서비스 구성 설정에 보이지 않는 것 같이 포장되어 있기 때문에

이다.

이 문제이고 나는 많은 다른 예를 생각할 수

...

  • 연결 문자열 섹션을 직접 들여다 모든 데이터 액세스 프레임 워크.
  • 만들 필요가있는 모든 사용자 지정 구성 설정.

... 단지 2 개의 이름을 지정하십시오.

Windows Azure에서 제공하는 구성 관리에서 뭔가가 누락되었거나 상당한 차이가 있습니까? 이 잘 지원되지 않는 무언가처럼

대답 아래 댓글에서

편집, 그것은 보인다. 다양한 구성 프로파일을 지원하기 위해 여러 솔루션 빌드 구성을 관리하는 것은 매우 약한 해결책이라고 생각합니다. 필자가 필요로하는 각 구성 프로파일에 대해 솔루션을 다시 빌드하지 않아도됩니다. 편집이 구성과 동일하지 않습니다.

zip 파일이므로 .cspkg 파일을 수정하는 방법이 있는지 궁금합니다. this 설명서에 따르면 Linux에서 할 수 있습니다.

나는 .cspkg 파일에 매니페스트에서 검토 한 결과는 다음과 같습니다 : 나는 경우

<PackageManifest version="2"> 
    <Encryption keytype="1" /> 
    <Contents hashtype="1"> 
    <Item name="MyApp.Web.UI_<GUID>.cssx" hash="AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2" uri="/MyApp.Web.UI_<GUID>.cssx" /> 
    <Item name="MyApp.Web.Services_<GUID>.cssx" hash="7AC81AFF642E4345173C8470C32A41118A4E3CFD4185B82D0ADA44B71057192D" uri="/MyApp.Web.Services_<GUID>.cssx" /> 
    <Item name="SMPackage_<GUID>.csmx" hash="B5E6B83B62AF64C7C11CAC1A394ABBF15D7DB7667A773C5284CE5BE95C5834E9" uri="/SMPackage_<GUID>.csmx" /> 
    <Item name="SDPackage_<GUID>.csdx" hash="F34B7C02A551D82BAD96881E2DA9447D0014D49B47CCB3840475BDC575234A7D" uri="/SDPackage_<GUID>.csdx" /> 
    <Item name="NamedStreamPackage_<GUID>.csnsx" hash="FA2B5829FF5D9B2D69DCDDB0E5BDEE6B8B0BC09FFBF37DAEEE41CF3F3F4D0132" uri="/NamedStreamPackage_<GUID>.csnsx" /> 
    </Contents> 
    <NamedStreams> 
    <Stream name="RequiredFeatures/MyApp.Web.Services/1.0" /> 
    <Stream name="RequiredFeatures/MyApp.Web.UI/1.0" /> 
    <Stream name="SupportData/MyApp.Web.Services/1.0" /> 
    <Stream name="SupportData/MyApp.Web.UI/1.0" /> 
    </NamedStreams> 
</PackageManifest> 

불행하게도, 변경되지 않은 "MyApp.Web.UI_.cssx"의 해시를 다시 계산 내 해시가 매니페스트 파일과 다릅니다.매니페스트에서

해시 : AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2

내 계산 된 해시 : 해시가 동일해야하므로 아직 파일을 변경하지 않은 E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

참고.

이것은 잘못 계산 한 것 같습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (FileStream fs = new FileStream(args[0], FileMode.Open)) 
     { 
      ComputeHash(new SHA256Managed(), fs); 
     } 
    } 

    private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream) 
    { 
     byte[] hash = hashAlgorithm.ComputeHash(stream); 
     string hashString = BitConverter.ToString(hash); 
     Console.WriteLine(hashString.Replace("-", string.Empty)); 
     Console.WriteLine(); 
    } 
} 

위의 문서 링크가 (어쨌든 리눅스에) 다시 계산 해시에 간단 제안 다음과 같이 내 방법이었다.

누구나 해시를 다시 계산하는 방법을 알고 있습니까?

+0

와 다이제스트를 얻을 수 있습니다. –

+0

그건 작동하지 않습니다 - ELMAH (및 다른 프레임 워크)는 .cscfg에 저장된 구성 데이터를 보지 않습니다. –

+0

필자가 아는 한, 하늘색 패키지의 구성 가능한 방법은 .cscfg 파일뿐입니다. ELMAH와 같은 프레임 워크의 경우 구성을 동적으로 변경하는 것과 같은 해결 방법을 찾아야 할 수도 있습니다. 하지만 나는 더 나은 답변을 제공 할 수있는 Stackoverflow에 하늘빛 전문가가 많이 있다고 생각합니다. 또한 이것은 매우 흥미롭고 중요한 질문입니다. –

답변

0

Web.config에서 구성 방법에 따라 변경하려는 항목이 있습니다. 사용할 수있는 해결책이 Azure 외부에 있습니다. Web.config transforms을 사용할 수 있습니다. 이러한 변환은 서비스 구성이 아닌 빌드 구성과 관련이 있지만 어쨌든 (... Local.csfg -> Debug, ... Cloud.csfg -> Release) 빌드 구성과 밀접하게 관련되어있는 서비스 구성입니다. 기본 빌드 구성이 작동하지 않는다면 필요한 빌드를 생성하십시오. 당신이 서비스 구성에 따라 서로 다른 서비스 정의를 사용하려면

는, 다음은 UI에서 지원하지 않는,하지만 당신은 mess around with the build process to make it work

+0

기술적으로는 작동 할 수 있지만 각 환경에 맞게 빌드 구성을 유지 관리해야합니다. 이 목록은 길어질 수 있으며 (개발, 통합, 시스템 테스트, UAT, 프로덕션) 빌드 타임에 추가되는 각 추가 빌드 구성을 작성해야합니다. 나는 Debug 빌드와 Release 빌드를 가지고 있으며, 어느 환경 으로든 배포 할 수 있어야한다. –

+0

어떤 솔루션을 사용하든 관계없이 각 환경마다 다른 web.config를 원한다면 web.config가 패키지의 일부로 포함되므로 환경마다 빌드를 수행해야합니다. 패키지는 일단 생성되면 변경할 수 없습니다. – knightpfhor

+0

전적으로 사실인지 모르겠습니다. "Debug"빌드 구성에서 "n"개의 서비스 구성을 가질 수 있습니다. "Local", "Cloud-Integration", "Cloud-SystemTest", "Cloud-UAT"등등을 가질 수 있다면 기본적으로 이들은 "Local"과 "Cloud"입니다. 각 서비스 구성에 대해필자는 추가 구성 프로파일에 대처하기 위해 전체 솔루션을 다시 빌드해야하는 이유를 알지 못합니다. 컴파일은 구성과 동일하지 않습니다. –

2

byte[] 오버로드를 사용하여 비교 StreamComputeHash()에 다른 해시 끝 전달 수 . 나는 이유를 모른다. 이것은 당신이 후하고있는 해시를 줄 것이다

private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream) 
{ 
    BinaryReader reader = new BinaryReader(stream) 
    byte[] hash = hashAlgorithm.ComputeHash(reader.ReadBytes((int)stream.length)); 
    string hashString = BitConverter.ToString(hash); 
    Console.WriteLine(hashString.Replace("-", string.Empty)); 
    Console.WriteLine(); 
} 

:

같은 것을보십시오.

당신은 아마 이미 발견 한 것처럼, 리눅스에 당신이 당신의 패키지에 대한 모든 구성 가능한 위해 파일을 .cscfg 사용할 수 있습니다

openssl dgst -sha256 /path/to/file