使用地图转换消息时出现 Biztalk 2020 异常
Biztalk 2020 exception when transforming message using a map
我们有一个应用程序 运行 在 Biztalk 2010 中是正常的,但相同的导出应用程序在导入时 运行 在 Biztalk 2020 中会产生异常。
该应用程序有一个编排,它接收传入的 xml 并使用映射对其进行转换。里面的代码如下this Microsoft doc.
此代码在 Biztalk 2010 中有效,但在 Biztalk 2020 中,调用变换形状时总是出现异常。
Exception occurred: Object reference not set to an instance of an object.,
at Microsoft.XLANGs.Core.Service.ApplyTransform(Type mapRef, Object[] outParams, Object[] inParams)
at XXX.XXX.XXX.Core.Process.Billing.BillingServiceProcess.segment2(StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)
我在 Visual Studio 中使用 header 映射通过输入 xml 手动测试了这个,并确认我得到了输出 xml 没有任何问题。
我验证了该地图存在于 Biztalk 中。
我已经验证传入的 xml 是有效的。
我似乎不能做的一件事是在编排中放置一个调试点,该选项对我来说是灰色的,我仍然不知道为什么。
作为 Biztalk 2020 的一部分,我需要了解已知问题或遗漏的步骤才能使其正常工作吗?
BizTalk 2010 和 BizTalk 2013 之间的映射发生了重大变化,请参阅Known issues in BizTalk Server 2013,因此需要检查从 2010 向上迁移的任何映射是否存在这些问题。
- 当输入 XML 节点包含任何假值或输入 XML 节点为空时,脚本 functoid 中的布尔参数为真。 修复:使用字符串而不是布尔输入。
- 当您在 functoid 中使用私有函数时,映射失败并且您收到以下错误消息:Fix:将函数声明为 public 而不是私有函数。
Method 'MyPrivateFunct' of extension object 'http://schemas.microsoft.com/BizTalk/2003/userCSharp' cannot be called because it is not public.
- 当您 return 来自 functoid 的空值时,映射失败并且您收到以下一般错误消息:Fix Return String.Empty 或其他一些替代值来表示空方案。如果需要,使用全局变量使空值在多个函数中可用。
ExceptionType: Microsoft.XLANGs.Core.XTransformationFailureException
Exception: Error encountered while executing the transform My.Map. Error:Transformation failed.
已知问题页面上还有一些问题,但您不太可能遇到这些问题。
请注意,有一种解决方法是设置“使用 XSL 转换”标志,但是根据我的博客 BizTalk 2013 R2 CU2 & BizTalk 2016 – Use XSL Transform,它有一些缺点,我不建议使用它,除非他们已经修复了你无法在 BizTalk 2020/Visual Studio 2019 中测试 Visual Studio 中的映射,因为该标志在那里不起作用。
我们有一个应用程序 运行 在 Biztalk 2010 中是正常的,但相同的导出应用程序在导入时 运行 在 Biztalk 2020 中会产生异常。
该应用程序有一个编排,它接收传入的 xml 并使用映射对其进行转换。里面的代码如下this Microsoft doc.
此代码在 Biztalk 2010 中有效,但在 Biztalk 2020 中,调用变换形状时总是出现异常。
Exception occurred: Object reference not set to an instance of an object.,
at Microsoft.XLANGs.Core.Service.ApplyTransform(Type mapRef, Object[] outParams, Object[] inParams)
at XXX.XXX.XXX.Core.Process.Billing.BillingServiceProcess.segment2(StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)
我在 Visual Studio 中使用 header 映射通过输入 xml 手动测试了这个,并确认我得到了输出 xml 没有任何问题。 我验证了该地图存在于 Biztalk 中。 我已经验证传入的 xml 是有效的。
我似乎不能做的一件事是在编排中放置一个调试点,该选项对我来说是灰色的,我仍然不知道为什么。
作为 Biztalk 2020 的一部分,我需要了解已知问题或遗漏的步骤才能使其正常工作吗?
BizTalk 2010 和 BizTalk 2013 之间的映射发生了重大变化,请参阅Known issues in BizTalk Server 2013,因此需要检查从 2010 向上迁移的任何映射是否存在这些问题。
- 当输入 XML 节点包含任何假值或输入 XML 节点为空时,脚本 functoid 中的布尔参数为真。 修复:使用字符串而不是布尔输入。
- 当您在 functoid 中使用私有函数时,映射失败并且您收到以下错误消息:Fix:将函数声明为 public 而不是私有函数。
Method 'MyPrivateFunct' of extension object 'http://schemas.microsoft.com/BizTalk/2003/userCSharp' cannot be called because it is not public.
- 当您 return 来自 functoid 的空值时,映射失败并且您收到以下一般错误消息:Fix Return String.Empty 或其他一些替代值来表示空方案。如果需要,使用全局变量使空值在多个函数中可用。
ExceptionType: Microsoft.XLANGs.Core.XTransformationFailureException
Exception: Error encountered while executing the transform My.Map. Error:Transformation failed.
已知问题页面上还有一些问题,但您不太可能遇到这些问题。
请注意,有一种解决方法是设置“使用 XSL 转换”标志,但是根据我的博客 BizTalk 2013 R2 CU2 & BizTalk 2016 – Use XSL Transform,它有一些缺点,我不建议使用它,除非他们已经修复了你无法在 BizTalk 2020/Visual Studio 2019 中测试 Visual Studio 中的映射,因为该标志在那里不起作用。