我们注意到,当 DevForce 请求超时时,它会自动重试。此处的论坛上也提到了此行为。在该论坛帖子中,建议的解决方案是增加超时以尝试完全避免该问题。对我们来说,这并不是一个真正可行的解决方案。我们知道有些操作会超时,增加超时不是一个可接受的解决方案。
更糟糕的是,如果调用是存储过程查询或 InvokeServerMethod 调用,则该调用很可能不是幂等的所以再次重试是不安全的,很可能最终弊大于利。我们已经开始在我们的应用程序中遇到类似的情况,这造成了很大的痛苦。一个简单的例子是:我们调用一个创建项目副本的存储过程。如果复制花费的时间太长,它将继续重试,但这仅意味着我们有 3 个复制操作都在并行进行。最终结果是最终用户收到错误(因为第 3 次重试仍然超时)但(最终)将有该项目的三个副本(存储过程最终将完成 - 重试逻辑似乎不会取消以前的请求-我什至不确定是否可以取消)。这是比较良性的例子之一 - 在其他情况下,重试操作可能会导致更严重的问题。
我从6.1.6 发行说明中看到,DevForce 不再为保存执行自动重试。我真的很想看到这种行为扩展到 StoredProcedureQueries 和 InvokeServerMethods。对于正常的 EntityQuery 操作(甚至可能是 Connect/Disconnect 调用),我对 rety 很好。如果这不是 DevForce 核心中可以更改的东西,有没有办法让它可配置或提供一些自定义方式让我们注入控制它的代码?