Azure角色配置管理

Cal*_*ert 5 configuration app-config web-config azure

当您别无选择,只能在web.config(或app.config)中保留配置设置时,我看不到Windows 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 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>
Run Code Online (Sandbox Code Playgroud)

这里有几个问题:

  • 我无法更新或更改服务配置之间是否启用了远程访问.

  • 我无法更新或更改服务配置之间的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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我重新计算未更改的"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();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的文档链接表明,重新计算哈希很简单(无论如何都在Linux上).

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

kni*_*hor 0

如果您的 web.config 中有一些项目需要根据其构建方式进行更改,那么您可以使用 Azure 之外的解决方案。您可以使用Web.config 转换。这些转换与您的构建配置而不是服务配置相关,但您的服务配置可能与您的构建配置密切相关(...Local.csfg -> 调试,...Cloud.csfg -> Release)。如果默认的构建配置不适合您,只需创建您需要的配置即可。

如果您想为每个服务配置使用不同的服务定义,那么 UI 不支持它,但您可以修改构建过程以使其正常工作