Biztalk脚本functoid失败

时间:2017-01-19 15:01:40

标签: biztalk biztalk-2010

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

  

' ScriptNS0:DoSomething的()'失败了。

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

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

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

1 个答案:

答案 0 :(得分:1)

您必须在Visual Studio中对此进行测试。要记住的一些事项:

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

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