Azure角色配置管理(Azure role configuration management)

2019-09-19 16:34发布

我没有看到的Windows Azure是如何让您改变程序的配置时,你有没有选择,只能在web.config中(或app.config)中保存配置设置。

例如...

经常项目将利用第三方库,使大量使用的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 ID=user@myServer;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不会看服务配置设置(这是我可以改变服务配置之间的配置设置的唯一方法)。

我能想到的许多其他例子,其中这是一个问题......

  • 任何直接在连接字符串节观看数据访问框架。
  • 任何自定义配置设置我需要创建。

...举两个。

我缺少的东西或这是由Windows Azure中提供的配置管理显著的差距呢?

编辑

从答案,下面的评论,它看起来像这样的东西是不能很好的支持。 我认为,管理多个解决方案生成配置,以支持不同的配置模板是一个非常薄弱的​​解决方案。 我不应该来重建每个配置文件我需要的解决方案(有可能会相当多的)。 汇编不等于配置。

我在想,如果有修改.cspkg文件,因为它仅仅是一个zip文件的方式。 根据该对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反正)。

有谁知道如何重新计算哈希值?

Answer 1:

传递一个StreamComputeHash()相比,使用具有不同的散列结束byte[]过载。 我不知道为什么。

尝试是这样的:

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上你可以得到摘要

openssl dgst -sha256 /path/to/file


Answer 2:

我必须要取决于它如何被内置到改变你的web.config项目,有一个解决方案,天青,您可以使用之外。 您可以使用Web.config文件转换 。 这些转换是绑到您的构建配置不是你的服务配置,但您的服务配置可能的紧密联系到您的构建配置呢(...... Local.csfg - >调试,... Cloud.csfg - >释放)。 如果默认编译配置不适合你,只是创建你所需要的人。

如果你想使用每个服务配置不同的服务的定义,那么它不是由UI支持,但你可以构建过程浪费时间,使其工作



文章来源: Azure role configuration management