我们已经注意到,当DevForce请求超时时,它会自动重试。论坛这里中也提到了这种行为。在那篇论坛文章中,建议的解决方案是增加超时时间,试图完全避免这个问题。对我们来说,这实际上不是一个可能的解决办法。有些操作我们知道会超时,增加超时是不可接受的解决方案。
更糟糕的是,如果调用是存储过程查询或InvokeServerMethod调用,则很可能调用不是幂等,因此重新尝试它是不安全的,并且很可能最终会带来更大的伤害而不是好处。我们已经开始在我们的应用程序中遇到这样的情况,它正在造成重大的痛苦。一个简单的例子是:我们调用一个创建项目副本的存储过程。如果复制时间太长,它将继续被重试,但这只是意味着我们有3个拷贝操作并行进行。最终的结果是,最终用户会得到一个错误(因为第三个rety仍然超时),但是(最终)将有三个条目副本(存储过程最终会完成--重试逻辑似乎不会取消以前的请求--我甚至不确定这种取消是可能的)。这是一个更好的例子--在其他情况下,重新尝试的操作可能会导致更糟糕的问题。
我从6.1.6释放说明中看到,DevForce不再为保存执行自动重试。我非常希望看到这种行为扩展到StoredProcedureQueries和InvokeServerMethods。对于正常的EntityQuery操作(甚至可能是连接/断开调用),我对rety没有意见。如果这不是可以在DevForce核心中更改的东西,那么是否有办法使其可配置,或者为我们注入控制它的代码提供一些自定义的方法?
发布于 2014-08-05 23:47:47
通信故障的自动重试行为在现在可用的7.2.4版本中是可配置的。有关使用信息,请参阅发布说明。
https://stackoverflow.com/questions/24742638
复制相似问题