编辑人员注释:本文章由 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. 下拉条的连动-ajax方式

    客户端触发: <select id="category1" onchange="changecategory()">    <option v ...

  2. Mvc Webapi+Fiddler调试 (WebAPI 一)

    Fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js, ...

  3. 嵌入式程序员应知道的0x10个基本问题

     来源:网络 嵌入式程序员应知道的0x10个基本问题 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 ...

  4. 《小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付》

    <小猪CMS(PigCms)多用户微信营销服务平台系统V6.1完美破解至尊版带微用户管理CRM+微信支付> 之前发布了不少微赢的多用户微信网站源码,今天为我的小伙伴们准备的是功能非常强悍, ...

  5. 用python发送GET和POST请求

    GET请求: python2.7: import urllib,urllib2 url='http://192.168.199.1:8000/mainsugar/loginGET/' textmod ...

  6. MySQL----alter table modify | change的不同

    1.modify.change都可以修改列的属性:一同的是modify只能修改表的数据类型.change比它要牛逼一点它可以在修改数据类型的同时也修改列名. 2.modify 的语法:alter ta ...

  7. MYSQL 关闭二进制日志

    方法 set sql_log_bin = 0; ---------------------------------------------------------------------------- ...

  8. 【写一个自己的js库】 1.搭个架子先

    最近在看<javascript dom 高级程序设计>,想着跟着里面的代码敲一遍吧,也算是做一下学习笔记吧,所以这不是重新发明轮子,只是个学习的过程. 1.先确定自己的命名空间,并且加入几 ...

  9. 最全面 Nginx 入门教程 + 常用配置解析

    转自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介绍和安装 一个简单的配置文件 模块介绍 常用场景配置 进阶内容 参考资料 ...

  10. POJ 3111 K Best(二分答案)

    [题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...