首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenEdge AppServer超时

OpenEdge AppServer超时
EN

Stack Overflow用户
提问于 2020-05-28 20:35:39
回答 1查看 392关注 0票数 0

我使用的是普通的老式OpenEdge AppServer (而不是PAS) 11.7,使用的是为C#生成的代理dll (开放客户端代理生成器)。

除了为连接设置超时之外,这个方法工作得很好。如果我使用那个代理调用一个函数,我想设置一个超时,这样调用就会失败(例如抛出一个异常)

我试过关注Progress.Open4GL.RunTimeProperties

RunTimeProperties.ConnectionTimeout

无证可查。并不像它的名字所暗示的那样

RunTimeProperties.SocketTimeout = 8000;

没有文档记录。默认值为0。值最有可能是毫秒

与此设置越来越接近。如果被调用函数的执行时间超过该值,则抛出Progress.Open4GL.Exceptions.Open4GLException

但是:它只在调用函数返回时抛出,因此它是非常无用的。通过将"PAUSE 100“添加到要调用的函数,可以轻松地进行测试。100秒后抛出异常(而不是8秒后)

如何实现函数调用的超时?

EN

回答 1

Stack Overflow用户

发布于 2020-05-28 21:04:38

有点..。

您可以为应用服务器调用设置全局超时。但不是按函数超时的函数。

根据https://knowledgebase.progress.com/articles/Article/P174143的说法

为了实现这一目标,在OpenEdge 10.2B中引入了两个新功能,分别位于过程块级别或应用程序服务器级别。

在程序块级别:

对过程调用进行时间限制的第一种方法是使用STOP-AFTER短语。此短语指定DO、FOR或REPEAT块的超时值。整数表达式,它指定块的每次迭代在发生超时之前的秒数。如果发生超时,AVM将引发停止条件。

在应用程序服务器级别:

限制过程调用执行时间的另一种方法是在全局UBroker或特定UBroker中设置名为srvrExecutionTimeLimit的属性。部分的ubroker.properties文件。这是一个非负整数属性,用于指定远程过程可以在给定AppServer上执行的最长时间(以秒为单位)。此超时值适用于在AppServer上执行的所有远程过程。默认值为零,表示无时间限制。AppServer srvrExecutionTimeLimit属性仅控制远程AppServer上过程的执行时间。客户端和AppServer端点之间的数据传输不考虑过程执行时间。

STOP-AFTER显然不会中断大多数语句。它似乎是在语句之间检查的。请考虑以下几点:

代码语言:javascript
复制
etime( yes ).

repeat stop-after 5 on stop undo, leave:

  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.
  pause 1.

end.

display etime.
pause.

代码语言:javascript
复制
etime( yes ).

repeat stop-after 5 on stop undo, leave:

  pause 10.

end.

display etime.
pause.

代码语言:javascript
复制
etime( yes ).

repeat stop-after 5 on stop undo, leave:

  pause 1.

end.

display etime.
pause.

因此,这取决于你的应用服务器代码实际在做什么,这可能会有帮助,也可能没有帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62064845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档