Соединения из .net в Progress.OpenClient throws Объект больше не доступен для использования. (7260) - PullRequest
0 голосов
/ 14 января 2019

Фон

Мой код C # не был затронут в течение длительного времени (1 год +), внезапно я получаю следующую ошибку при подключении к нашему Progress серверу:

Progress.Open4GL.Exceptions.Open4GLException
  HResult=0x80131500
  Message=Object is no longer available for use. (7260) 
  Source=Progress.o4glrt
  StackTrace:
   at Progress.Open4GL.Proxy.OpenAppObject.RunProc(String procName, ParamArray paramArray)
   at My.Service.Progress.LoadStuff.<Handle>d__2.MoveNext() in C:\MyRepo\My.Service.Progress\LoadStuff.cs:line 34

Это вызывается через ссылку DLL клиента Progress:

<package id="Progress.OpenClient" version="11.7.1" targetFramework="net471" />

Вроде так:

public async Task Handle(GetStuffToLoad message, IMessageHandlerContext context)
{
    var parameters = new ParamArray(4);

    parameters.AddCharacter(0, message.param1, ParamArrayMode.INPUT);
    parameters.AddCharacter(1, message.param2, ParamArrayMode.INPUT);
    parameters.AddDecimal(2, decimal.Parse(message.param3), ParamArrayMode.INPUT);
    parameters.AddLongChar(3, null, ParamArrayMode.OUTPUT);

    _trisClient.RunProc("loadStuff", parameters);

    var stuffContent = (string)parameters.GetOutputParameter(3);
}

Симптомы

  • С первой попытки все в порядке. Нет ошибок.
  • Выполнение второго вызова вскоре после первого выдает вышеуказанную ошибку.
  • Я звоню в нашу среду TEST локально.
  • Насколько нам известно, TEST не имеет таких же симптомов.

Я записал предыдущий запрос об исправлении в команду Progress, я получил его при вызове среды TEST progress из нескольких потоков:

Progress.Open4GL.Exceptions.BusySessionException
  HResult=0x80131500
  Message=Session is busy. Another request is executing or there is an open result set(s). (7226) 
  Source=Progress.o4glrt
  StackTrace:
   at Progress.Open4GL.DynamicAPI.Session.runProcedure(String requestID, String procedureName, ParameterSet parms, Boolean persistent, Boolean internal_Renamed, Int64 procId, MetaSchema localSchema, Int32 stateModel)

В то время было решено провести рефакторинг моей стороны, чтобы она не работала параллельно, так что основные соединения были затоплены.

Но с тем, что я узнал сейчас, я склонен полагать, что эти две проблемы связаны.

Оба разделяют этот HResult=0x80131500 отчет.

Что я думаю, что происходит

Поскольку первая попытка работает, а вторая - нет, я думаю, что либо сервер TEST Progress, либо Progress OpenClient неправильно закрывают соединение и / или транзакцию.

Что должно произойти, чтобы исправить проблему? Это что-то на моей стороне или что-то с сервером Progress (dll или реальный сервер)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...