Biztalk脚本functoid失败

Biztalk脚本functoid失败,biztalk,biztalk-2010,Biztalk,Biztalk 2010,在BizTalk映射中,我使用来自外部程序集的脚本functoid。将添加程序集引用。但是,使用映射时,会导致以下错误: “ScriptNS0:DoSomething()”已失败 现在,这可能意味着这个脚本functoid有很多错误。但是,即使将try-catch块放在整个C#代码周围,catch抛出一个自定义异常,正确的新部署也会产生相同的错误,而不是新添加的自定义错误 这意味着映射已经启动,并且一旦遇到脚本functoid,就会导致错误,但实际上没有在函数中执行哪怕是最轻微的操作。当查看地图

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

“ScriptNS0:DoSomething()”已失败

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

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


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

您必须在Visual Studio中进行测试。需要记住的几件事:

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

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

    是否已检查外部程序集是否添加到GAC?在visual studio中进行测试时,映射是否有效?映射是在端口上使用还是在业务流程中使用?它在GAC中,并且在端口上使用映射时以及在业务流程中使用映射时都会发生错误。不确定是否在VS中测试。当来自外部程序集引用的代码从同一系统上的控制台应用程序启动时,不会发生错误。