Windows Azure 网站:应用程序字符串和连接字符串的工作原理
编辑人员注释:本文章由 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
AppSettings 和 ConnectionStrings 配置集合中。
祝您使用愉快!
本文翻译自:
Windows Azure 网站:应用程序字符串和连接字符串的工作原理的更多相关文章
- 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...
- 您应该了解的 Windows Azure 网站在线工具
编辑人员注释:本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写. 如果想要了解并亲身参与计算资源管理,那么您一定会很高兴得知这一消息:Windows Azur ...
- 在 Windows Azure 网站中配置动态 IP 地址限制
我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...
- 使用 IIS Manager 对 Windows Azure 网站进行远程管理
最近,我们为客户新增了使用 Windows自带的 IIS管理控制台管理 Azure网站的功能.IIS Manager支持 HTTP over SSL,提供到您的 Windows Azure 网站 ...
- 禁用 Windows Azure 网站中的 ARR 实例关联
编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...
- Windows Azure 网站上的 WebSocket 简介
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站最近新增了对 WebSocket 协议的支持..NE ...
- 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 随着身份盗窃和各种形式的网络犯罪迅速增多,使用安全套接字层 (SSL) 对网站进行保护变得越来越 ...
- 比较Windows Azure 网站(Web Sites), 云服务(Cloud Services)and 虚机(Virtual Machines)
Windows Azure提供了几个部署web应用程序的方法,比如Windows Azure网站.云服务和虚拟机.你可能无法确定哪一个最适合您的需要,或者你可能清楚的概念,比如IaaS vs PaaS ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
随机推荐
- Android 混淆文件project.properties和proguard-project.txt
参考文档:http://blog.csdn.net/xueyepiaoling/article/details/8202359 http://glblong.blog.51cto.com/305861 ...
- VS2010 CLR20r3 devenv.exe 错误的解决--vs重启解决方案
VS2010 CLR20r3 devenv.exe 错误的解决 最近我的vs2010经常过段时间就报CLR20r3错误的解决,出现这个异常我的vs2010就要重启,很是烦人,这么搞没法干活也. 搜 ...
- FastJSON应用前测试
FastJSON 应用前测试 FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.\ 实际 ...
- relatedTarget, fromElement, toElement
原文:http://www.quirksmode.org/js/events_mouse.html#relatedtarget W3C在mouseover和mouseout事件中添加了relatedT ...
- 转载文章:Windows Azure 基础结构服务上的 Microsoft Dynamics NAV 和 Microsoft Dynamics GP!
Windows Azure 基础结构服务(虚拟机和虚拟网络)可提供按需基础结构,该基础结构可进行伸缩以适应不断变化的业务需求.无论您是在虚拟机中创建新应用程序,还是运行现有应用程序,我们都将按分钟收费 ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- Entity Framework学习笔记
原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总 之前的小项目做完了,到了总结经验和 ...
- 攻击DotCom小游戏
许久都没写博客了,些许是前段时间有些懈怠,今天来写博客,想记录下做过的事情,怕以后电脑换了,以前做的小项目也跟着丢了,总结下最近做的一个小游戏: 游戏目的:建立一个7X7的网格,选择其中的连续的三格来 ...
- Ubuntu12.04下eclipse提示框黑色背景色的修改方法
eclipse提示框的背景颜色使用的是系统的提示框颜色配置,在windows下为黄色,但在Ubuntu12.04(gnome)下却是黑色,造成提示内容很难看清. 在eclipse中我们是无法修改这个颜 ...
- 【Apache ZooKeeper】为ZNode设置watcher
众所周知,ZooKeeper中的ZNode是树形结构,现在我需要给/app1结点设置watcher,监听/app1下增减.删除和修改的结点,并将相应的事件使用log4j记录到日志文件中.ZNode的变 ...