BizTalk 2013 R2 XLANG-将状态持久化到数据库时发生异常

BizTalk 2013 R2 XLANG-将状态持久化到数据库时发生异常,biztalk,biztalk-2013,biztalk-orchestrations,Biztalk,Biztalk 2013,Biztalk Orchestrations,我正在开发BizTalk 2013 R2。我有一个编排,在这里我调用helper类来调用Web服务(以降低延迟)。该类是可序列化的类。编排成功构建。当我测试邮递员提供的解决方案时,效果很好 但对于每个成功响应,我也会在事件日志中看到以下异常 xlang/s engine event log entry: An unrecoverable exception (see the 'inner exception' below) has occurred. Service Name: Orchestr

我正在开发BizTalk 2013 R2。我有一个编排,在这里我调用helper类来调用Web服务(以降低延迟)。该类是可序列化的类。编排成功构建。当我测试邮递员提供的解决方案时,效果很好

但对于每个成功响应,我也会在事件日志中看到以下异常

xlang/s engine event log entry: An unrecoverable exception (see the 'inner exception' below) has occurred.
Service Name: Orchestration Name
Service Id: df34c579-a9e6-5696-e322-b80210d1f723
Instance Id: 0512ae45-c89c-4ffc-9bd2-332b854d4965      
An exception occurred when persisting state to the database.       
Exception type: PersistenceException

Source: Microsoft.XLANGs.BizTalk.Engine
Target Site: Void Commit()
The following is a stack trace that identifies the location where the 
      exception occurred
      at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.Commit()
      at 

    Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.ScheduleComplete(Boolean terminate)
          at Microsoft.XLANGs.Core.Service.Persist(Boolean dehydrate, Context ctx, Boolean idleRequired, Boolean finalPersist, Boolean bypassCommit, Boolean terminate)
          at Microsoft.XLANGs.Core.ServiceContext.OnCommit()
          at "OrchestrationInstanceName".segment0(StopConditions stopOn)
          at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

Additional error information:

A batch item failed persistence Item-ID 9b508582-438f-442d-a320-3ff7d9dd87ed OperationType MAIO_CommitBatch Status -1061151938 ErrorInfo A database failure occurred due to an unexpected failure. .

Exception type: PersistenceItemException
数据库错误与此持久性错误同时出现

以下存储过程调用失败:“{call[dbo].[bts\U UpdateMsgbox\UXXXXXX](?,?,?,,?,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,?)}”。SQL Server返回错误字符串:“警告:由于使用了本地连接提示,连接顺序已强制执行。;警告:由于使用了本地连接提示,连接顺序已强制执行。;忽略了重复键。”

我在shape calling.net helper类中添加了
system.diagnostics.trace
。然后我注意到业务流程在第一次运行时运行了两次,它抛出了Xlang-持久性错误和数据库-“重复键被忽略”错误,然后业务流程第二次运行,并成功完成了响应

很明显,我的编排运行了两次。然后,我在shape调用helper类周围添加了作用域。作用域的事务类型为“无”

然后解决了Xlang持久性错误问题


为什么我需要在调用周围添加额外的作用域以使其正常工作?

这样的错误通常表明BizTalkMsgBoxDb的性能不佳。 起初,我推荐跑步,这将指出最明显的原因。很可能存在大量僵尸/孤立消息,此工具也可以帮助清除这些消息

另请看一下数据库优化:

  • 数据库设置不正确
  • 大索引碎片
  • 大量挂起的实例-应定期终止这些实例
(详情请参阅)

还考虑:

  • 缩短跟踪历史记录的时间
  • 减少跟踪的工件和事件的数量-关闭非必要的(生产的最佳实践是根本没有任何)

如果事件对您没有帮助,您需要评估数据库服务器磁盘性能。您可能需要迁移到更快的存储

这样的错误通常表明BizTalkMsgBoxDb的性能不佳。 起初,我推荐跑步,这将指出最明显的原因。很可能存在大量僵尸/孤立消息,此工具也可以帮助清除这些消息

另请看一下数据库优化:

  • 数据库设置不正确
  • 大索引碎片
  • 大量挂起的实例-应定期终止这些实例
(详情请参阅)

还考虑:

  • 缩短跟踪历史记录的时间
  • 减少跟踪的工件和事件的数量-关闭非必要的(生产的最佳实践是根本没有任何)

如果事件对您没有帮助,您需要评估数据库服务器磁盘性能。您可能需要迁移到更快的存储

,这并不能解释为什么在调用外部程序集时添加了额外的作用域,持久性错误就会消失。这也不能解释为什么在调用外部程序集时添加了额外的作用域,持久性错误就会消失。这是一个重复出现的问题吗?是否所有SQL作业都已启用且运行正常?@Johns-305这是一个一致的问题,直到我们在业务流程中围绕外部程序集的调用添加了额外的作用域。是的,环境没有其他问题。被调用的web服务的重试策略是什么?这是一个反复出现的问题吗?是否所有SQL作业都已启用且运行正常?@Johns-305这是一个一致的问题,直到我们在业务流程中围绕外部程序集的调用添加了额外的作用域。是的,环境没有其他问题。被调用的web服务的重试策略是什么?