【问题标题】:Biztalk scripting functoid failureBiztalk 脚本 functoid 失败
【发布时间】:2017-06-04 08:12:54
【问题描述】:

在 BizTalk 映射中,我使用来自外部程序集的脚本 functoid。程序集引用已添加。但是,当使用映射时,会导致以下错误:

'ScriptNS0:DoSomething()' 失败。

现在,这可能意味着这个脚本functoid 有很多问题。但是,即使在整个 C# 代码周围放置了一个 try-catch 块并且 catch 引发了自定义异常,正确的新部署也会产生完全相同的错误,而不是新添加的自定义错误。

这表明映射已经开始,并且一旦遇到脚本函数,就会导致错误,但实际上并没有在函数中执行任何最轻微的操作。查看地图的 XSLT 时,它看起来非常好。对外部程序集的引用已被反复检查(以及此外部程序集的引用)。一切看起来都很好,非常像我见过的许多其他映射,但结果仍然是上面的错误。

我意识到这是一个相当模糊的问题,但有人知道这里发生了什么吗?

【问题讨论】:

  • 您是否检查过外部程序集是否添加到 GAC?
  • 在 Visual Studio 中测试时地图是否有效?地图是在端口上使用还是在编排中使用?
  • 它在 GAC 中,当映射用于端口和编排时都会发生错误。不确定是否在 VS 中进行测试。当外部程序集引用中的代码从同一系统上的控制台应用程序启动时,不会发生错误。

标签: biztalk biztalk-2010


【解决方案1】:

您必须在 Visual Studio 中对此进行测试。需要注意的几点:

  1. 您的实际数据很可能导致异常(这是您未在控制台应用程序中测试的边缘或极端情况)。
  2. 在外部程序集中引发异常并不总是能在 XSLT 映射中很好地转换,尤其是在端口上执行此操作时。 IIRC 在编排中处理得稍微优雅一些​​。
  3. 如果您无法在 Visual Studio 测试或单元测试中重现此问题,您应该能够将 Visual Studio 调试器附加到适当的 BtsNtSvc.exeBtsNtSvc64.exe(或 w3wp.exe,如果它在 IIS 中运行/隔离主机)。在你的自定义函数入口处设置断点,单步执行,看看发生了什么。如果您只能在非开发环境中重现它,请查看是否可以设置远程调试 - 但在这种情况下,您最好增强 functoid 上的日志记录并尽可能重新部署。

一般来说,我总是尝试在自定义 functoid 脚本中执行以下操作:

  • 避免抛出异常 - 使用类似 TryParse 而不是 Parse 的方法,并且在解析失败时返回错误字符串或空字符串或原始字符串(取决于目标系统的要求/容差),而不是抛出例外。如果您确实引发了异常,则不太可能得到妥善处理,并且异常类型或文本不太可能将其返回给用户/管理员。
  • 改为在这些情况下进行错误记录 - 通常使用 Windows 事件日志 (System.Diagnostics.EventLog.WriteEntry)。确保使用正确注册的事件源,最好是与您的应用程序名称匹配并由您的安装过程注册的事件源,但至少要在计算机上存在一个,以避免引发另一个无意义的异常!这将使开发人员/管理员能够更快地了解下一次发生的事情。

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多