编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写。

Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的键值字符串对存储在与网站相关的配置信息中。在运行时,Windows Azure 网站会自动检索这些值,使这些值可供网站中运行的代码使用。开发人员可以存储普通键值对,以及将用作连接字符串的键值对。

由于键值对存储在 Windows Azure 网站配置存储的后台,因此不需要存储在 Web 应用程序的文件内容中。从安全角度而言,这是一个附带好处,因为包含密码的 SQL 连接字符串等敏感信息永远不会以明文形式显示在 web.config 或 php.ini 文件中。

可以在 Azure 门户的“Configure”选项卡中输入网站的键值对。以下快照显示了此选项卡上可输入密钥和关联值的两个位置:

您可以将键值对输入为“应用程序设置”或“连接字符串”。唯一的区别在于连接字符串包括一些额外元数据,告知 Windows Azure 网站该字符串值是数据库连接字符串。对于在网站中运行的下游代码及特殊情况下连接字符串的一些行为,此方法十分有用。

将键值对作为环境变量进行检索

开发人员输入其网站的键值对后,网站内运行的代码可以在运行时检索该数据。

Windows Azure 网站通常通过环境变量向正在运行的网站提供这些值。例如,使用之前快照中显示的数据。以下是 ASP.NET 中一个输出环境变量中的数据的代码段:

以下是通过前面的代码段查看的示例页面输出:

[注释:本文章中 SQL 连接字符串的敏感部分故意留空并标上了星号。但是请放心,在运行时您可获取完整的连接字符串,包括服务器名称、数据库名称、用户名和密码。]

由于“应用程序设置”和“连接字符串”键值对存储在环境变量中,因此开发人员可以轻松地从 Windows Azure 网站中支持的任何 Web 应用程序框架检索这些值。例如,以下代码段显示了如何使用 php 检索这些设置:

通过前面的示例,您会注意到用于引用各个密钥的命名模式。对于“应用程序设置”,相应环境变量的名称会在前面加上“APPSETTING_”。

“连接字符串”有一个命名约定,可根据您在数据库下拉列表中选择的数据库类型,给环境变量加上前缀。示例代码使用的是“SQLAZURECONNSTR_”,因为已配置的连接字符串已在下拉列表中选择“Sql Databases”。

数据库连接字符串类型和用于命名环境变量的前置字符串的完整列表如下所示:

如果选择“Sql Databases”,前置字符串为“SQLAZURECONNSTR_”

如果选择“SQL Server”,前置字符串为“SQLCONNSTR_”

如果选择“MySQL”,前置字符串为“MYSQLCONNSTR_”

如果选择“Custom”,前置字符串为“CUSTOMCONNSTR_”

在 ASP.NET 中检索键值对

到目前为止,我们已经展示了在门户中输入的键值对如何通过环境变量流向 Web 应用程序。ASP.NET Web 应用程序还可以使用一些出人意料的运行时魔术。.NET 开发人员会觉得不同键值类型的名称似乎看起来很熟悉。“应用程序设置”将整齐地映射到 .NET Framework 的
appSettings 配置。同样,“连接字符串”对应于 .NET Framework 的 connectionStrings 集合。

以下是另一个显示如何使用 System.Configuration 类型引用应用程序设置的 ASP.NET 代码段:

请注意之前输入到门户中的值如何自动成为 AppSettings 集合的一部分。如果应用程序设置恰巧已存在于 web.config 文件中,Windows Azure 网站将在运行时使用与网站相关的值自动覆盖这些应用程序设置。

连接字符串的工作方式与此类似,但有一个额外的小要求。记得前文有一个名为“example-config_db”的连接字符串与网站相关联。如果网站的 web.config 文件在 <connectionStrings /> 配置部分中引用该连接字符串,则 Windows Azure 网站会在运行时使用门户中显示的值自动更新该连接字符串。

但是,如果 Windows Azure 网站未能从 web.config 中找到名称相匹配的连接字符串,则在门户中输入的连接字符串将只能作为环境变量使用(如之前所示)。

举例来说,假定 web.config 条目如下所示:

网站可以使用以下代码段以与环境无关的方式引用该连接字符串:

在开发人员的本地计算机上运行此代码时,返回的值将是从 web.config 文件中获取的值。但是,在 Windows Azure 网站中运行此代码时,返回的值会被在门户中输入的值覆盖:

这的确是一个非常有用的功能,因为它巧妙地解决了由来已久的开发问题,确保应用程序能够使用正确的连接字符串信息,无论应用程序的部署位置如何。

从命令行配置键值对

作为维护门户中应用程序设置和连接字符串的替代方法,开发人员也可以使用 PowerShell cmdlet 或跨平台命令行工具来检索和修改这两种类型的键值对。

例如,以下 PowerShell 命令定义了多个应用程序设置的哈希表,然后使用
Set-AzureWebsite cmdlet 将其存储在 Azure 中,并将其与名为“example-config”的网站相关联。

在 ASP.NET 中运行以下代码段之后,将显示初始应用程序设置的值(“some-key-here”)已经更新,第二个键值对(“some-other-key”)也已经添加。

示例 HTML 输出显示生效了的更改:

some-other-key <-->a-different-value

some-key-here<--> changed-this-value

更新连接字符串的工作方式与此类似,虽然语法稍有不同,这是因为内部的 PowerShell cmdlet 将连接字符串处理成
ConnStringInfo 对象的 List<T>(确切地说,是 Microsoft.WindowsAzure.Management.Utilities.Websites.Services.WebEntities.ConnStringInfo)。

以下 PowerShell 命令显示了如何定义新的连接字符串,如何将其添加到与网站相关联的连接字符串列表,然后将所有连接字符串再次存储在 Azure 中。

请注意,对于属性 $cs.Type,可以使用以下任一字符串来定义类型:“Custom”、“SQLAzure”、“SQLServer”和“MySql”。

在 ASP.NET 中运行以下代码段将列出网站的所有连接字符串。

请记住,虽然 Windows Azure 网站可覆盖连接字符串,并在 .NET Framework 的连接字符串配置集合中将其具体化,但该连接字符串必须已在 web.config 中定义。在该示例网站中,web.config 已经更新,如下所示:

现在,当运行 ASP.NET 页面时,它将显示已使用通过 PowerShell 存储的值覆盖这两个连接字符串值(第一个连接字符串的敏感部分故意使用星号留空):

总结

本文章介绍了如何轻松地将配置数据的简单键值对与您的网站相关联,并在运行时将其作为环境变量进行检索。通过此功能,Web 开发人员可以安全地存储配置数据,而无需担心此数据在网站配置文件中会以明文形式显示。如果您碰巧在使用 ASP.NET,还有一点出人意料的配置“魔术”,可以将这些值自动加入.NET
AppSettingsConnectionStrings 配置集合中。

祝您使用愉快!

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work.aspx

Windows Azure 网站:应用程序字符串和连接字符串的工作原理的更多相关文章

  1. 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...

  2. 您应该了解的 Windows Azure 网站在线工具

     编辑人员注释:本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写. 如果想要了解并亲身参与计算资源管理,那么您一定会很高兴得知这一消息:Windows Azur ...

  3. 在 Windows Azure 网站中配置动态 IP 地址限制

    我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...

  4. 使用 IIS Manager 对 Windows Azure 网站进行远程管理

     最近,我们为客户新增了使用 Windows自带的 IIS管理控制台管理 Azure网站的功能.IIS Manager支持 HTTP over SSL,提供到您的 Windows Azure 网站 ...

  5. 禁用 Windows Azure 网站中的 ARR 实例关联

    编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...

  6. Windows Azure 网站上的 WebSocket 简介

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站最近新增了对 WebSocket 协议的支持..NE ...

  7. 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 随着身份盗窃和各种形式的网络犯罪迅速增多,使用安全套接字层 (SSL) 对网站进行保护变得越来越 ...

  8. 比较Windows Azure 网站(Web Sites), 云服务(Cloud Services)and 虚机(Virtual Machines)

    Windows Azure提供了几个部署web应用程序的方法,比如Windows Azure网站.云服务和虚拟机.你可能无法确定哪一个最适合您的需要,或者你可能清楚的概念,比如IaaS vs PaaS ...

  9. 在 Windows Azure 网站中进行纵向扩展和横向扩展

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...

随机推荐

  1. 在github搭建你的个人主页

    一. 有没有遇到过在简历上要求写项目地址的经历.或者面试时面试官问你的项目在线地址是多少. 二. github 不但有代码托管的功能,还可以搭建在线演示项目,对于一个没有多少私房钱的穷屌丝,这个是不是 ...

  2. nginx,wsgi,flask之间的关系

    之前看写flask 应用的一些疑问,百度上的答案解释的不错,这里记着以后可以看看Web 服务器层对于传统的客户端 - 服务器架构,客户端向服务器发送请求,服务器接收请求,处理请求,最后给客户端返回请求 ...

  3. Java之线程的控制

    1. join线程: 在线程执行过程中,有时想让另一个线程先执行,比如将一大问题分割成许多小问题,给每一个小问题分配线程,但所有小问题处理完后再让主线程进一步操作.此时我们可以在主线程中调用其它线程的 ...

  4. SQL Server 数据文件的页面分部情况

    ---------------------------------------------------------------------------------------------------- ...

  5. Java日期时间使用(转)

    Java日期时间使用总结 转自:http://lavasoft.blog.51cto.com/62575/52975/   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个 ...

  6. docker 运行挂载磁盘

    docker:/data# mkdir /awp docker:/data# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...

  7. 使用过渡场景在多个场景的切换COCOS2D(4)

    CCNode有三个方法,使用CCDirector的replaceScene方法替换场景时,每个节点都会调用这三个方法: onEnter与onExit方法在改变场景过程中的特定时刻被调用,这取决于是否使 ...

  8. 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇.我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.and ...

  9. 略谈cpu架构种类

    一直对x86/i386/i686/x86_64这些东西感觉很不清楚,查些资料,解决部分问题,小记一番. Question1:什么是x86? x86或80x86是英特尔Intel首先开发制造的一种微处理 ...

  10. CSS Unicode 编码

    CSS 中文字体 Unicode 编码表 在 CSS 中设置字体名称,直接写中文是可以的.但是在文件编码(GB2312.UTF-8 等)不匹配时会产生乱码的错误. 为此,在 CSS 直接使用 Unic ...