2012-07-18 21 views
5

web.config(またはapp.config)で構成設定を保持する以外に、Windows Azureを使用してアプリケーションの構成を変更する方法がわかりません。例えばAzureロール構成管理

...かなり頻繁に

プロジェクトは、web.configファイルを頻繁に使用するサードパーティのライブラリを利用します。 web.configの使用には、接続文字列、アプリ設定またはカスタム設定セクションが含まれる場合があります。これの良い例はELMAHです。 ELMAHのweb.configファイルには、次のようになります。

<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が.cspkgファイルにあるとELMAHは、(私はサービス構成の間で構成設定を変えることができる唯一の方法です)サービス構成の設定を見ていないだろうとしてパッケージ化されているためです。

私はこれが問題である他の多くの例...

  • 接続文字列の部分を直接見任意のデータ・アクセス・フレームワークと考えることができます。
  • 作成する必要のあるカスタム設定。

...名前はちょうど2です。

私は何かが見つからないのですか、これはWindows Azureによって提供される構成管理に大きな差がありますか?これがうまくサポートされていないものをあるよう

答えと以下のコメントから

EDITは、それが見えます。さまざまな構成プロファイルをサポートするために複数のソリューションビルド構成を管理することは、非常に弱い解決策であると私は思います。必要な構成プロファイルごとにソリューションを再構築する必要はありません(かなりの数があります)。コンパイルは構成と同じではありません。

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(); 
    } 
} 

上記のドキュメントリンク、それは(とにかくLinux上)再計算ハッシュすることは簡単であることを示唆している次のように私の方法でした。

ハッシュを再計算する方法を知っている人はいますか?

+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、プロダクション)、それぞれのビルド構成をビルドしてビルド時間を増やす必要があります。私は、デバッグビルドとリリースビルドを持ち、それらのいずれかを任意の環境にデプロイできるようにしたいと考えています。 –

+0

どのようなソリューションを使用していても、各環境に異なるweb.configが必要な場合は、web.configがパッケージの一部として組み込まれているため、環境ごとにビルドする必要があります。一度作成したパッケージは変更できません。 – knightpfhor

+0

私はそれが完全に真実であるかどうかはわかりません - "Debug"ビルド構成の下では、 "n"個のサービス構成を持つことができます。私は "ローカル"、 "クラウド統合"、 "クラウドシステムテスト"、 "クラウドUAT"などを持つことができる場合、デフォルトでは、これらは "ローカル"と "クラウド"ですが、これらのサービス構成のそれぞれについてなぜ私は、追加の構成プロファイルに対処するためにソリューション全体を再構築する必要があるのか​​わかりません。コンパイルは構成と同じではありません。 –

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(); 
} 

のようなものを試してみてください。

あなたはおそらく既に発見してきたように、Linux上であなたはあなたがあなたのパッケージのための任意の構成可能のファイルを.cscfg使用することができます

openssl dgst -sha256 /path/to/file 
関連する問題