【问题标题】:BizTalk map infinite loop during build (easy to replicate)构建期间 BizTalk 映射无限循环(易于复制)
【发布时间】:2014-08-05 20:33:53
【问题描述】:

我正在尝试使用 BizTalk (2013) 中的 Web 服务,但构建过程最终会消耗 3 GB 内存并在 10 分钟后退出而未指定错误。

我不确定我做错了什么,或者这只是 WSDL 的组合方式。任何建议将不胜感激!

复制问题的步骤

  1. 添加生成的项目 > 使用 WCF 服务 > https://webservice.s6.exacttarget.com/etframework.wsdl
  2. 添加新地图
  3. 源架构:任何东西
  4. 目标架构:RetrieveRequest
  5. 不需要实际的映射。构建项目并观察您的资源被消耗

注意:删除“Retrieves”节点仅解决 RetrieveRequest 的问题。

我不确定这是否相关,但我注意到复杂类型“DataFolder”有一个名为“ParentFolder”的元素,它属于复杂类型 DataFolder。 WSDL 中还有很多其他类似的实例,所以我希望这不是问题!

【问题讨论】:

    标签: web-services wsdl biztalk biztalk-2013


    【解决方案1】:

    我尝试在 BizTalk 2010 (Visual Studio 2010) 中重现它,并看到了类似的内存使用模式。但是 5 分钟后,我确实在地图的 .cs 文件中遇到了一些错误,包括 Exception has been thrown by the target of an invocationSystem.OutOfMemoryException 异常。

    其他错误与无效声明的私有 const 字符串有关。

    public sealed class MapName : global::Microsoft.XLANGs.BaseTypes.TransformBase {
    
        private const string _strMap = ;
    
        private const string _strArgList = ;
    

    要消除内存不足异常,请右键单击地图并在 XML(文本)编辑器中打开。找到GenerateDefaultFixedNodes="Yes" 并替换为No 并重新编译。

    这确实意味着如果没有映射到它们,它不会在目标架构中创建具有默认值的节点。

    我还发现有必要至少映射一个字段以消除其他错误。

    如果你想知道我是如何解决这个问题的。我在另一个架构上也有类似的经历,我偶然发现了这个博客 BizTalk Mapping – fixing huge maps 来解释原因(一个巨大的 XSD 文件)以及解决它的技巧。

    【讨论】:

    • 很棒的收获。尽管我认为问题不在于 BizTalk,而是在循环引用上设置默认值。从技术上讲,一个实例将永远循环;)。
    • 太棒了!那解决了它!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 2023-02-17
    • 2011-07-06
    • 1970-01-01
    • 2016-05-15
    • 2021-11-26
    • 2013-11-27
    • 2017-04-01
    相关资源
    最近更新 更多