MS CRM MaxDepth工作流程设置

时间:2016-12-20 21:28:15

标签: dynamics-crm-2011 dynamics-crm

MS CRM 2011具体。这实际上是4个问题:

一个。为什么选择8作为默认限制? (这是任意的,原始深度计数器是3位整数(执行上下文的深度虽然是32位),开发人员只是想着2的幂,9是一个邪恶的数字......)

B中。将此增加到16的危险是什么? (除了错误的递归设置,以某种方式通过测试现在将在错误而不是8之前潜水16次,并且事实上,根据事情的真实程度,我可能仍会得到一些无限的循环错误)

℃。更改此脚本的脚本是否必须在每个CRM服务器上运行,还是仅在其中一个服务器上运行? (或者我猜,这是存储在本地配置中还是共享的)

d。这是提出这类问题的最佳论坛吗? (我觉得它对于开发问题来说有点边缘。)

请注意,我已经有了执行此操作的脚本,我了解执行上下文深度是什么,并且我知道如何减少过度深度的可能性。这些不是我的问题,或者至少不是我可以做任何事情的问题。感谢。

2 个答案:

答案 0 :(得分:4)

您已经涵盖了上一段中的大部分答案,所以我首先回答问题D - 这可能不是提出这些问题的最佳论坛。有些人会发现他们过于宽泛或基于意见。

至于其他问题:

  • 一个。我不知道为什么选择这个值。

  • B中。最好避免导致问题的情况而不是增加阈值。我确定你的系统可以使用高于8的设置,但你可能隐藏了一个糟糕的设计或其他一些问题。你提到这是你无法控制的,但对于其他读这篇文章的人来说,尝试解决问题或提出更好的设计。

  • ℃。您无需更改每台服务器上的设置。你提到你知道如何更改它但我会在这里为其他人提供一个脚本来阅读这个答案。

    这是一个PowerShell脚本,用于将值设置为 n

    Add-PSSnapin Microsoft.Crm.PowerShell
    $setting = Get-CrmSetting WorkflowSettings
    $setting.MaxDepth=n
    Set-CrmSetting $setting
    

答案 1 :(得分:1)

A)它用于无限循环保护,所以我猜这个值被选中,因为它代表了保护性能和功能之间的理想平衡(尽管你需要要求微软确定)。它详细阐述了MSDN

  

平台用于无限循环预防。在大多数情况下,这个   财产可以被忽略。

     

每次正在运行的插件或工作流发出消息请求时   触发另一个插件或工作流执行的Web服务,   执行上下文的Depth属性增加。如果深度   属性在配置的时间内递增到其最大值   限制,平台认为这种行为是无限循环的   进一步插件或工作流程执行中止。最大深度   (8)和时间限制(一小时)可由Microsoft配置   Dynamics CRM管理员。

B)特别是长时间运行的进程可能会影响系统性能(因为其他系统作业在长时间运行的进程后排队)。如果我是正确的,因为限制可以防止性能问题,那么提高限制可能会使系统性能受到威胁。

作为一般经验法则,这些不是我们应该改变的设置(如果它更容易做,例如通过用户界面)。我们可以假设(并希望)微软选择这个值是有原因的(即使我们不确定是哪个原因)。我们可以合理地假设我们比原始系统开发人员更了解这个设置如何运作,它做什么以及可能的副作用。因此,改变设置存在风险,因为我们不完全理解(通过比较)它的作用或它将导致的副作用。

这里也存在一个问题,你并没有真正解决问题。在正常使用情况下,您不应该接近此限制。解决症状无法解决问题。如果是我,我处于你的位置,增加限制不是我会使用的解决方案。

最后,允许进程运行时间更长可能意味着您遇到了2分钟timeout

  

无论插件是同步还是执行   异步,有2分钟的时间限制   执行在沙箱中注册的插件。如果执行   您的插件逻辑超出了时间限制,即System.TimeoutException   被扔了。如果插件需要比2分钟更多的处理时间   时间限制,请考虑使用工作流程或其他后台进程   完成预期的任务。

C)我相信的每台服务器。

D)如果您认为问题适合,我建议您阅读Asking然后再问一下。更糟糕的是,问题在于投票和结束。如果你想进一步讨论,请把它带到Meta