Фон
Мой код 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 или реальный сервер)?