Тайм-аут OpenEdge AppServer - PullRequest
       91

Тайм-аут OpenEdge AppServer

0 голосов
/ 28 мая 2020
• 1000 . Если я вызываю функцию с помощью этого прокси-сервера, я хочу установить тайм-аут, чтобы вызов не удался (например, сгенерировав исключение)

Я пробовал следовать Progress.Open4GL.RunTimeProperties

RunTimeProperties. Время соединения вышло Без документов. Не выполняет то, что предлагает название

RunTimeProperties.SocketTimeout = 8000; Не задокументировано. По умолчанию 0. Значение, скорее всего, будет миллисекундами. Подходим ближе с этой настройкой. Если время выполнения вызываемой функции превышает это значение, генерируется Progress.Open4GL.Exceptions.Open4GLException

НО: он генерируется только тогда, когда вызывающая функция возвращает, поэтому это совершенно бесполезно. Легко проверить, добавив "ПАУЗА 100" к вызываемой функции. Через 100 секунд возникает исключение (а не через 8 секунд)

Как реализовать тайм-аут для вызова функции?

1 Ответ

3 голосов
/ 28 мая 2020

Тип ...

Вы можете установить глобальный тайм-аут для вызовов сервера приложений. Но не функция по таймауту функции.

Согласно https://knowledgebase.progress.com/articles/Article/P174143

Для достижения этой цели в OpenEdge 10.2B были введены две новые функции: либо на уровне блока процедур, либо на уровне сервера приложений.

На уровне блока процедуры:

Первый способ ограничения времени вызовов процедур включает использование фразы STOP-AFTER. Эта фраза определяет значение тайм-аута для блока DO, FOR или REPEAT. Целочисленное выражение, указывающее количество секунд, которое имеет каждая итерация блока до истечения времени ожидания. Если происходит тайм-аут, AVM вызывает условие STOP.

На уровне сервера приложений:

Другой способ ограничить время выполнения вызовов процедур - установить свойство srvrExecutionTimeLimit в глобальный раздел [UBroker] или специфический c [UBroker.] файла ubroker.properties. Это неотрицательное целочисленное свойство, указывающее максимальное время в секундах, в течение которого удаленная процедура может выполняться на данном сервере приложений. Это значение тайм-аута применяется ко всем удаленным процедурам, выполняемым на AppServer. Значение по умолчанию - ноль, что указывает на отсутствие действующих ограничений по времени. Свойство AppServer srvrExecutionTimeLimit контролирует только время выполнения процедуры на удаленном AppServer. Передача данных между клиентом и конечными точками AppServer не учитывает время выполнения процедуры.

STOP-AFTER очевидно не прерывает большинство операторов. Кажется, что это проверяется между операторами. Рассмотрим следующее:

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.

против

etime( yes ).

repeat stop-after 5 on stop undo, leave:

  pause 10.

end.

display etime.
pause.

против

etime( yes ).

repeat stop-after 5 on stop undo, leave:

  pause 1.

end.

display etime.
pause.

Итак, в зависимости от того, что на самом деле делает код вашего сервера приложений, это может а может и нет, помогите.

...