本文列出了使用 Microsoft BizTalk Server 2013 时的已知问题。

原始产品版本: BizTalk Server 2013
原始 KB 编号: 2954101

XSLCompiledTransform 中的已知问题

BizTalk Server 2013 使用 .NET XslCompiledTransform 类来提高转换性能。 类和以前使用的 XslTransform 类在 XslCompiledTransform 行为上存在一些差异。 以下是与此差异和建议的解决方案相关的一些已知问题:

  • 脚本 functoid Boolean 参数的更改

    当输入 XML 节点包含任何 false 值或输入 XML 节点为空时,脚本 functoid 中的布尔参数为 true。

  • 不支持专用函数

    在 a 中使用专用函 functoid 数时,映射会失败,并收到以下错误消息:

    无法调用扩展对象“http://schemas.microsoft.com/BizTalk/2003/userCSharp”的“MyPrivateFunct”方法,因为它不是公共的。

    XslCompiledTransform 类仅支持调用公共方法。 此限制记录在 从 XslTransform 类迁移 时。

    将函数声明为公共函数而不是专用函数。

  • 不支持返回 null

    functoid 某个映射返回 null 值时,映射将失败,并收到以下泛型错误消息:

    ExceptionType:Microsoft.XLANGs.Core.XTransformationFailureException

    异常:执行转换 My.Map 时遇到错误。 错误:转换失败。

    在 Visual Studio 中测试同一地图时,它会提供更具描述性的错误消息:

    调用的目标引发了异常。 扩展函数不能返回 null 值。

    XslCompiledTransform 类不支持从转换中调用的函数返回 null 值。

    返回 String.Empty 或其他一些替代值来表示 null 方案。 如果需要,请使用全局变量使 null 值在多个函数中可用。

  • 更改脚本 functoid XPathNodeIteraton 参数

    XPathNodeIterator 脚本 functoid 中的参数使用该 XPathArrayIterator 类型。 在早期BizTalk Server版本中,它使用了该 XPathSelectionIterator 类型。 由于此更改,节点。必须添加 MoveNext () 调用,如以下代码所示,以避免出现以下错误消息:

    枚举尚未启动。 调用 MoveNext。

    public static bool WriteNode(XPathNodeIterator node)
      node.MoveNext(); //needs to be added in BizTalk Server 2013 to avoid error
      XPathNavigator xpn = node.Current;
      XmlDocument xdoc = new XmlDocument();
      xdoc.LoadXml(xpn.OuterXml);
      return true;
    

    调用函数 MoveNext()

  • 函数重载由参数数而非类型区分。

    以下函数重载包含不同类型的参数:

    public short MyOverloadedFunction(int testvalue)
    public short MyOverloadedFunction(string testvalue)
    

    由于这些函数重载都具有相同的参数计数,因此如果在转换中使用参数,映射将失败并收到以下错误消息:

    不明确的方法调用。 扩展对象“http://schemas.microsoft.com/BizTalk/2003/ScriptNS0”包含多个“MyOverloadedFunction”方法,这些方法具有 1 个参数 () 。

    XslCompiledTransform 类仅根据参数数区分函数。 此限制记录在 从 XslTransform 类迁移时。

    确保所有函数重载都包含不同数量的参数。

  • 回退到 XslTransform

    可以将 BizTalk Server 2013 转换引擎配置为使用旧XslTransform类。 我们不建议使用此方法,因为环境将失去类提供的 XslCompiledTransform 许多性能和内存使用情况改进。 此外,.NET XslTransform 类已弃用。 因此,不会为其发布新的更新或修补程序。

    如果无法使用前面提到的解决方案更新地图,则可以通过在以下位置添加值为 1 的 DWORD UseXslTransform 来进行此更改:

  • 对于 64 位 BizTalk 主机实例:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration

  • 对于 32 位 BizTalk 主机实例和 Visual Studio 的测试映射功能:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration

    企业单一Sign-On (SSO) 中的已知问题

    以下是 2013 BizTalk Server特定于 SSO 的一些已知问题:

  • 升级到 BizTalk Server 2013 不会升级 SSO

    从 BizTalk Server 2009 或 2010 BizTalk Server就地升级到 2013 BizTalk Server可能无法在同一台计算机上升级 SSO。 如果此问题导致 SSO 主机密服务器未升级,则尝试升级组中的其他 BizTalk 服务器时,会收到以下错误消息:

    请升级主机密服务器

    引用Microsoft.BizTalk.Interop.SSOClient.dll的任何BizTalk Server组件都会失败,你将收到以下错误消息:

    无法加载文件或程序集“Microsoft.BizTalk.Interop.SSOClient,Version=7.0.2300.0”

    此问题已在 BizTalk Server 2013 媒体的更高版本中解决。 因此,请确保使用最新的可用媒体进行升级。

  • 无法加载 Microsoft.BizTalk.Interop.SSOClient.dll 版本 5.0.1.0

    在以下情况下,可能会收到以下错误消息:

    无法加载文件或程序集“Microsoft.BizTalk.Interop.SSOClient.dll,Version=5.0.1.0”

  • 从 2009 BizTalk Server或 2010 BizTalk Server就地升级后,WCF 接收位置或 WCF 发送端口会引发错误。 之所以发生这种情况, Microsoft.BizTalk.Adapter.Wcf.Runtime.dll 是因为文件未正确升级到版本 3.10.229.0。

    如果版本Microsoft.BizTalk.Adapter.Wcf.Runtime.dll早于 3.10.229.0,请从位于) 的 BizTalk Server 2013 安装介质 (<DVD-Drive>\BizTalk Server\MSI\Program Files 复制文件的正确版本,将其放入BizTalk Server安装文件夹中,然后将其安装到全局程序集缓存 (GAC) 。 可以使用gacutil.exe工具将.dll文件安装到 GAC 中,如下所示:

    gacutil.exe /if Microsoft.BizTalk.Adapter.Wcf.Runtime.dll
    
  • 此错误由之前在 2009 BizTalk Server或 2010 BizTalk Server使用的自定义代码引发。 这是因为 BizTalk Server 2009 和 BizTalk Server 2010 具有 .NET 版本 5.0.1.0 Microsoft.BizTalk.Interop.SSClient.dll 的文件。 但是,BizTalk Server 2013 使用文件的 .NET 版本 7.0.2300.0。

    更新并重新生成自定义代码,以引用文件的 BizTalk Server 2013 版本 (7.0.2300.0) Microsoft.BizTalk.Interop.SSClient.dll。 如果重新生成不是一个选项,请通过对相应配置文件的部分进行以下修改,重定向到 <runtime>/<assemblyBinding> 版本 7.0.2300.0:

    <dependentAssembly>
        <assemblyIdentity name="Microsoft.BizTalk.Interop.SSOClient" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="5.0.1.0" newVersion="7.0.2300.0"/>
    </dependentAssembly>
    
  • 由于文件依赖项不正确,Microsoft BizTalk 企业服务总线 (ESB) 会引发此错误。

    此问题在 BizTalk Server 2013 累积更新 2 (CU2) 及更高版本中修复。

    有关此问题的详细信息,请参阅:在 2013 BizTalk Server使用 ESB 配置工具时无法加载文件或程序集 Microsoft.BizTalk.Interop.SSOClient Version=5.0.1.0 错误

    有关如何获取最新的累积更新来解决此问题,请参阅 Service Pack 和BizTalk Server的累积更新列表

  • 无法加载 SSOPSServer.dll

    可能会收到以下记录在事件日志中的错误消息:

    无法加载 \Program Files\Common Files\Enterprise Single Sign-On\SSOPSServer.dll 错误代码:0x8007007E,找不到指定的模块。

    此错误是无害的,可以忽略。 为了防止此错误继续发生,请将原始安装介 质中的SSOPSServer.dll 文件复制到 \Program Files\Common Files\Enterprise Single Sign-On 计算机上的文件夹中。 对于 64 位安装的 SSO,请使用安装介质上的 SSOPSServer.dll 文件 \Platforms\SSO64\Files 。 对于 32 位安装的 SSO,请使用该文件。\Platforms\SSO\Files

  • 主机集成服务器 2013 SSO 无法使用 BizTalk SSO 主机密

    当 Host Integration Server 2013 SSO 服务尝试访问 BizTalk Server 2013 SSO 主机密服务时,将引发以下错误消息:

    未能检索主机密。 验证主机密服务器名称是否正确且可用。 机密服务器名称:BTSSSOSERVER 错误代码:0x00000057,参数不正确。

    Host Integration Server 2013 包含版本 9.0.2096.0 的 SSO。 但是,BizTalk Server 2013 包括版本 9.0.1865.0。 因此,在主机集成服务器和 BizTalk 服务器上的 SSO 服务访问共享主机密服务器的混合环境中,服务器必须运行 Host Integration Server 2013 SSO 服务。 请注意,在 BizTalk 服务器上安装主机集成服务器会将现有 SSO 服务升级到版本 9.0.2096.0,并且还需要将远程 Master Secret SSO 服务器升级到 9.0.2096.0。

    其他已知问题

  • 升级到 BizTalk Server 2013 不会部署新的Microsoft.BizTalk.GlobalPropertySchemas.dll

    从 BizTalk Server 2009 或 2010 BizTalk Server到 2013 BizTalk Server就地升级不会将新Microsoft.BizTalk.GlobalPropertySchemas.dll文件正确部署到BizTalkMgmtDb数据库中。 当 BizTalk 访问任何新的全局属性时,这可能会导致错误。 使用 WCF.HttpHeaders时,可能会发生这种情况,即与该 SB-Messaging Adapter属性关联的任何属性,或任何其他新属性。 失败和以下错误消息 SB-Messaging Adapter 如下:

    适配器“SB-Messaging”引发错误消息。 详细信息“System.Runtime.InteropServices.COMException (0xC0C01620) :HRESULT 异常:0xC0C01620
    at Microsoft.BizTalk.TransportProxy.Interop.IBTTransportBatch.MoveToSuspendQ (IBaseMessage msg)
    at Microsoft.BizTalk.Adapter.Wcf.Runtime.Batch2.MoveToSuspendQ (IBaseMessage 消息, Object userData)
    at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkReceiveBatch.SuspendMessageIfNeeded (IBaseMessage message, StreamAndUserData streamAndUserData, Int32 messageStatus) ”。
    适配器“SB-Messaging”引发错误消息。 详细信息“System.Exception:按命名空间加载属性信息列表失败或在列表中找不到属性。 验证架构是否已正确部署。
    at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.EndOperation (IAsyncResult 结果)
    at AsyncInvokeEndTwoWayMethod (Object, Object[], IAsyncResult)
    在 System.ServiceModel.Dispatcher.AsyncMethodInvoker.InvokeEnd (对象实例,Object[]& 输出,IAsyncResult 结果)
    在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd (MessageRpc rpc&)
    在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7 (MessageRpc rpc&)
    at System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) ”

    使用AddGlobalPropertySchemas.exe工具在升级后手动部署.dll文件。 从 AddGlobalPropertySchemas.exe下载该工具。 必须传入 BizTalk 管理数据库服务器名称和数据库名称,如下所示:

    AddGlobalPropertySchemas.exe /server:MyServer /database:BizTalkMgmtDb
    

    如果数据库位于SQL Server的命名实例上,请指定 MyServer\MyInstance,而不仅仅是 MyServer。

  • ESB 2.2 配置文件会导致 ESB 故障

    ESB Toolkit 2.2 使用需要修改默认esb.config文件的 Unity 2.0。 如果不进行这些修改,可能会出现以下问题:

  • ESB 2.2 配置失败,收到以下错误消息:

    使用“6”参数调用“PushAllConfiguration”的异常 () :“无法识别的元素'typeConfig'。 (C:\Program Files (x86) \Microsoft BizTalk ESB Toolkit\esb.config第 151 行)

  • ItinerarySelectReceiveXML当接收管道用于调用业务规则引擎以使用 ESB BRI 解析程序) 动态选择行程 (时,将引发以下错误:

    调用的目标引发了异常。
    源:Microsoft.Practices.ESB.Resolver.ResolverMgr
    方法:System.Collections.Generic.Dictionary'2[System.String,System.String] 解析 (Microsoft.Practices.ESB.Resolver.ResolverInfo、Microsoft.BizTalk.Message.Interop.IBaseMessage、Microsoft.BizTalk.Component.Interop.IPipelineContext)
    错误源:mscorlib
    Error TargetSite: System.Object InvokeMethod (System.Object, System.Object[], System.Signature, boolean)
    StackTrace 错误:在 System.RuntimeMethodHandle.InvokeMethod (对象目标、Object[] 参数、Signature sig、布尔构造函数)
    at System.Reflection.RuntimeConstructorInfo.Invoke (BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    at System.RuntimeType.CreateInstanceImpl (BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
    at System.Activator.CreateInstance (Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
    在 System.Activator.CreateInstance (类型中,Object[] args)
    at Microsoft.Practices.ESB.Resolver.ResolverFactory.Create (String key)
    at Microsoft.Practices.ESB.Resolver.ResolverMgr.GetResolver (ResolverInfo 信息)
    at Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve (ResolverInfo info, IBaseMessage message, IPipelineContext pipelineContext)

    有关此问题的详细信息以及有关如何修改esb.config文件以解决该文件的说明,请参阅 ESB Toolkit BRE 迭代解决程序失败并出现异常ESB 配置失败并出现无法识别的元素“typeConfig”。

  • EDIFACT 已挂起具有 UNB 3.3 段的消息

    升级到 BizTalk Server 2013 后,EDIFACT包含 UNB 3.3 段的消息失败,你将收到以下错误消息。 此消息EDIFACT在 2010 BizTalk Server处理时没有问题:

    按命名空间加载属性信息列表失败或在列表中找不到属性。 验证架构是否已正确部署。

    使用以下步骤重启相关主机实例:

  • 在BizTalk Server管理控制台中,导航到 BizTalk 组>应用程序>BizTalk EDI 应用程序>资源
  • 右键单击 “资源”,然后单击 “添加>BizTalk 程序集”。
  • “添加资源” 窗口中,单击 “添加”,选择默认位置 C:\Program Files (x86)\Microsoft BizTalk Server 2013) (Microsoft.BizTalk.Edi.BaseArtifacts.dll文件,然后单击 “打开”。
  • 选中“ 覆盖所有” 复选框。
  • 在“添加资源”复选框 中选择“添加到全局程序集缓存 ”,然后单击 “确定”。
  •