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 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
随机推荐
- html5新增结构元素
1.article元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引用的内容.除了内容外,一个article元素还有它自己的标题(一般放在header里),有时还有自己的脚注. 2.sec ...
- 存储过程与SQL的结合使用
--1调用存储过程exec 存储过程名 参数 openrowset方法使用: select * from openrowset('sqlncli', 'server=192.168.247.64;ui ...
- Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)
本文翻译自Pre-defined Timestamp Extractors / Watermark Emitter ------------------------------------------ ...
- PBM文件格式
PBM是一种单色位图文件,常用于打印机,由于需要下面对PBM文件格式进行分析. 每个文件的开头两个字节(ASCII码)作为文件描述子,可以理解为文件头.具体如下: 头 类型 编码 P1 位图 ASCI ...
- 习题3.15 自调整表Find例程
#include<stdio.h> #include<stdlib.h> typedef int * List; /* 自调整表的Find数组实现 */ int Find(Li ...
- 调magento自定义模板发邮件
1. 设置邮件模板 <global> <template> <email> <custom_email_template1 module="Samp ...
- 【APP UI 设计模式】(一)APP UI 设计原则和流程
一.基本原则 1.用户体验原则UCD,以用户为中心去设计 2.设计模式是可重用的设计规范实现 3.反模式是糟糕设计的典型,极力避免使用 ...
- R实战读书笔记四
第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...
- 当MVC4无法跳转时
//RedirectToAction("Index","首页"); //return View("首页/Index"); //Redirec ...
- html系列教程--描述
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...