BizTalk 2016:如何定义应用专属配置文件并在对应应用中调用
BizTalk 2016 实现应用专属配置文件方案
问题根源
BizTalk的自定义组件(管道组件、业务流程类库、助手类等)由BTNSVC.exe宿主进程加载,默认仅读取全局的BTNSVC.exe.config,单独添加的app.config不会被自动加载,因此无法直接通过常规ConfigurationManager读取。
解决方案
以下三种方案可实现各应用独立配置,避免全局配置的耦合风险:
1. 利用BizTalk应用级配置(推荐)
BizTalk内置了应用级配置管理功能,配置项存储在BizTalk管理数据库中,无需额外文件:
- 配置步骤:
- 打开BizTalk管理控制台,选中目标应用,右键选择「配置」
- 在「应用程序设置」标签页中添加键值对(如连接字符串、版本信息)
- 代码读取示例:
using Microsoft.BizTalk.ExplorerOM; using System; public string GetApplicationSetting(string applicationName, string settingKey) { using (var catalogExplorer = new BtsCatalogExplorer()) { // 替换为你的BizTalk管理数据库连接字符串 catalogExplorer.ConnectionString = "Server=BT_SERVER;Database=BizTalkMgmtDb;Integrated Security=SSPI"; var targetApp = catalogExplorer.Applications[applicationName]; return targetApp.ApplicationSettings[settingKey]?.Value ?? throw new ArgumentException($"Setting {settingKey} not found for application {applicationName}"); } }
- 注意:需确保
BTNSVC.exe服务账户拥有BizTalk管理数据库的读取权限。
2. 自定义配置文件加载逻辑
为每个应用创建独立配置文件,手动指定路径加载:
- 配置步骤:
- 给每个应用的类库项目添加专属配置文件(如
App1.config、App2.config) - 部署时将配置文件添加为BizTalk应用的「资源」,指定部署路径为
%BT_INSTALL_DIR%\Applications\[你的应用名]
- 给每个应用的类库项目添加专属配置文件(如
- 代码读取示例:
using System.Configuration; using System.IO; public Configuration LoadApplicationSpecificConfig(string applicationName, string configFileName) { var configPath = Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "Applications", applicationName, configFileName ); var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configPath }; return ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); } // 使用示例 var appConfig = LoadApplicationSpecificConfig("App3", "App3.config"); var dbConnString = appConfig.ConnectionStrings.ConnectionStrings["MyDatabase"].ConnectionString;
- 注意:需确保
BTNSVC.exe服务账户拥有配置文件所在目录的读取权限。
3. 使用BizTalk SSO存储敏感配置
对于敏感配置(如密码、密钥),推荐使用SSO存储,安全性更高:
- 配置步骤:
- 通过SSO管理控制台创建新的SSO应用程序,为每个BizTalk应用分配独立的配置项
- 将配置项以XML格式存储到SSO中
- 代码读取示例:
using Microsoft.BizTalk.SSOClient.Interop; using System.Xml; public string GetSSOConfigurationValue(string ssoApplicationName, string configKey) { var ssoConfigStore = (ISSOConfigStore)new ISSOConfigStore(); object configSection; ssoConfigStore.GetConfigSection(ssoApplicationName, "AppSettings", ISSOConfigStore.SSO_FLAG_NONE, out configSection); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(configSection.ToString()); return xmlDoc.SelectSingleNode($"//add[@key='{configKey}']")?.Attributes["value"].Value; }
- 注意:需为
BTNSVC.exe服务账户分配对应SSO应用程序的读取权限。
关键注意事项
- 所有方案需在BizTalk宿主环境(而非本地VS调试环境)验证,因为本地调试使用VS进程,读取的是项目的
app.config,与BTNSVC.exe环境不同 - 避免直接修改
BTNSVC.exe.config,所有配置变更应通过BizTalk管理控制台或自定义逻辑实现 - 部署配置文件时,需确保文件随BizTalk应用一起部署,避免路径缺失问题
内容的提问来源于stack exchange,提问作者Tech_dopamine
相关产品推荐
相关产品推荐

