在“本地”世界中,当创建像 Windows 服务这样的应用程序时,我通常会使用 App.config 文件来存储有关应用程序的各种配置信息,从数据库连接字符串到 WCF 端点信息。
在 Azure Worker Role 世界中,我现在看到了 .cscfg 文件,据说这些文件包含“针对该角色”的信息。
我不明白这些文件是为了补充应用程序的配置,还是完全替换 App.config 文件。这两个文件如何配置 Azure Worker 角色?
在“本地”世界中,当创建像 Windows 服务这样的应用程序时,我通常会使用 App.config 文件来存储有关应用程序的各种配置信息,从数据库连接字符串到 WCF 端点信息。
在 Azure Worker Role 世界中,我现在看到了 .cscfg 文件,据说这些文件包含“针对该角色”的信息。
我不明白这些文件是为了补充应用程序的配置,还是完全替换 App.config 文件。这两个文件如何配置 Azure Worker 角色?
非常基本的解释:
从概念上讲,它们是相同的。在传统应用程序中,您使用 app.config 文件来定义与应用程序相关的各种设置(在 appSettings 部分中)。同样,您使用 cscfg 文件来定义与您的云应用程序相关的各种设置(在 ConfigurationSettings 部分)。与 app.config 文件一样,您可以在 cscfg 文件中定义其他内容(例如,云应用程序的实例数)。
如果您愿意,您仍然可以在 app.config 文件中定义一些设置,但要记住的一件事是 app.config 文件被“打包”并部署,为了更改设置,您必须重新打包您的应用程序并部署它。但是,您可以使用门户或服务管理 API 即时更改 cscfg 文件中的设置,而无需重新打包和重新部署应用程序。例如,考虑在设置文件中定义数据库连接字符串的场景。如果您在 app.config 中指定,为了更改它,您需要在 app.config 文件中进行更改 --> 构建应用程序 --> 发布应用程序。对于 cscfg 文件,您只需在门户中更改此值。
对于 Web/Worker 角色,传统的配置文件 (app/web.config) 将像在本地部署中一样继续工作。但重要的是要知道此文件包含在服务包中,这意味着它是部署的一部分。
这意味着您无法在不重新部署应用程序的情况下更改 app/web.config 中的设置。另一方面,ServiceConfiguration.cscfg 是在云服务部署槽级别定义的,位于实际服务包旁边。这意味着您可以更改此配置文件,而无需重新部署您的应用程序。这些设置也可以通过调用RoleEnvironment.GetConfigurationSettingValue
(类似于ConfigurationManager.AppSettings
)从您的应用程序中访问。
如果您考虑构建一个可在本地和 Windows Azure 中运行的应用程序,请考虑使用Microsoft.WindowsAzure.ConfigurationManager 包。它会根据应用程序的运行位置自动选择 cscfg 或 app/web.config。
提示:通过订阅 RoleEnvironment.Changing/Changed 事件,您可以拦截对此配置文件的更改。例如,您可以处理这个以更新代码中的 web.config(在此处解释)。