BRE 策略 - 在哪里存储数据库事实的连接字符串
BRE Policy - Where to Store Connection Strings for Db Facts
使用 BizTalk 2016 FP3 CU5。
我有一个 BRE 规则,它接受 4 个类型化的 xml 文档和一个数据连接。
我已经设置了一个编排来使用调用规则形状来执行它。
我正在使用 BizTalk 部署框架 (BTDF) 进行部署,这可以很好地将 BRE 策略部署到。我的问题是,在为策略(名为 NotificationService.xml)导出的 xml 中,有一个对规则中使用的数据库的硬编码引用 - 如下所示:
<datarow ref="db_32" server="SDEIDBTI04\CrossRef" dataset="CrossRef" table="Lookups"
这引用了我的开发虚拟机,但随着解决方案通过测试升级到生产环境,服务器名称需要相应更改。
我目前对这个问题的解决方案是使用 BTDF 的能力来预处理 xml 文件并用取自 SSO 的 EnvironmentSettings excel 文件中的值替换。因此,我创建了一个 "NotificationService.Dynamic.xml",其中我已将上一行更改为:
<!-- ifdef ${_xml_preprocess} -->
<datarow ref="db_32" server="${Common.Components.CrossRefDbServer}\CrossRef" dataset="CrossRef" table="Lookups" instances="16" selectivity="1" isdataconnection="true" instance="0" />
<!-- endif -->
(*我必须保留 ifdef 是有充分理由的!)
在我的 deployment.btdfproj 文件中,我添加了以下内容以确保部署的是预处理策略:
<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml"
Condition="'$(Configuration)' == 'Server'">
<LocationPath>..\</LocationPath>
<OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>
<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml" Condition="'$(Configuration)' != 'Server'">
<LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
<OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>
<RulePolicies Include="NotificationService.Dynamic_Processed.xml">
<LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
</RulePolicies>
这是可行的,但我不禁认为我的解决方案过于复杂了。每次导出新版本的策略时,我现在都必须经历从导出的 NotificationService.xml 文件创建 NotificationService.Dynamic.xml 文件的麻烦。人们如何在不使用 BTDF 的情况下解决同样的问题?
如果事实证明我遵循了最佳路径,那么希望这个问题将来对其他人有所帮助 - 我无法从 google!
中找到答案
我会创建一个静态方法,您可以在其中创建获取查找值的所有逻辑。
因此,在此方法中,您将使用 SSOSettingsFileReader.dll 获取 SSO CrossRefDbServer
设置,然后执行一些 C# 代码来调用查找表和 return 值。
如果您将注册表设置 StaticSupport 设置为 1
,则可以在 BRE 中调用此方法。
使用 BizTalk 2016 FP3 CU5。
我有一个 BRE 规则,它接受 4 个类型化的 xml 文档和一个数据连接。 我已经设置了一个编排来使用调用规则形状来执行它。
我正在使用 BizTalk 部署框架 (BTDF) 进行部署,这可以很好地将 BRE 策略部署到。我的问题是,在为策略(名为 NotificationService.xml)导出的 xml 中,有一个对规则中使用的数据库的硬编码引用 - 如下所示:
<datarow ref="db_32" server="SDEIDBTI04\CrossRef" dataset="CrossRef" table="Lookups"
这引用了我的开发虚拟机,但随着解决方案通过测试升级到生产环境,服务器名称需要相应更改。
我目前对这个问题的解决方案是使用 BTDF 的能力来预处理 xml 文件并用取自 SSO 的 EnvironmentSettings excel 文件中的值替换。因此,我创建了一个 "NotificationService.Dynamic.xml",其中我已将上一行更改为:
<!-- ifdef ${_xml_preprocess} -->
<datarow ref="db_32" server="${Common.Components.CrossRefDbServer}\CrossRef" dataset="CrossRef" table="Lookups" instances="16" selectivity="1" isdataconnection="true" instance="0" />
<!-- endif -->
(*我必须保留 ifdef 是有充分理由的!)
在我的 deployment.btdfproj 文件中,我添加了以下内容以确保部署的是预处理策略:
<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml"
Condition="'$(Configuration)' == 'Server'">
<LocationPath>..\</LocationPath>
<OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>
<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml" Condition="'$(Configuration)' != 'Server'">
<LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
<OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>
<RulePolicies Include="NotificationService.Dynamic_Processed.xml">
<LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
</RulePolicies>
这是可行的,但我不禁认为我的解决方案过于复杂了。每次导出新版本的策略时,我现在都必须经历从导出的 NotificationService.xml 文件创建 NotificationService.Dynamic.xml 文件的麻烦。人们如何在不使用 BTDF 的情况下解决同样的问题?
如果事实证明我遵循了最佳路径,那么希望这个问题将来对其他人有所帮助 - 我无法从 google!
中找到答案我会创建一个静态方法,您可以在其中创建获取查找值的所有逻辑。
因此,在此方法中,您将使用 SSOSettingsFileReader.dll 获取 SSO CrossRefDbServer
设置,然后执行一些 C# 代码来调用查找表和 return 值。
如果您将注册表设置 StaticSupport 设置为 1
,则可以在 BRE 中调用此方法。