ConcurrentDictionary - Insufficient memory to continue execution of the program

0

Witam.
Piszę dalej (podejście nr 1241) połączenie ASP .NET Core + Angular do Comarch Optima. Udało mi się nawet z tym dość daleko zajść. Ktoś na forum poradził mi (nie pamiętam wątku), że do trzymania obiektów mogę sobie stworzyć klasę statyczną i tam trzymać wszystkie loginy:

public static class OptimoLogin
{
	public static ConcurrentDictionary<int, ILogin> logins;
}

// Tworzenie nowego obiektu ILogin i dopisanie go do słownika
if(OptimoLogin.logins == null)
{
	ILogin login = application.LockApp(256, 5000, null, null, null, null);
	login = application.Login("ADMIN", "admin", "Firma Demo", 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
	OptimoLogin.logins = new System.Collections.Concurrent.ConcurrentDictionary<int, ILogin>();
	OptimoLogin.logins.TryAdd(1, login);
}

To logowanie jest prowizoryczne. Ono będzie wyglądać kompletnie inaczej. Na tę chwilę zajmuje się samą obsługą dodawania dokumentów, więc tokeny i logowanie było by uciążliwe. W momencie kiedy chce dokument anulować, dostaję błąd z tytułu.

public PostResponse CancelDocument(int id)
{
	if(OptimoLogin.logins != null)
	{
		AdoSession session = OptimoLogin.logins[1].CreateSession(); // <=== Insufficient memory to continue execution of the program
		DokumentHaMag dokument = (DokumentHaMag)session.CreateObject("CDN.DokumentyHaMag", "TrN_TrNID = " + id);
		dokument.AnulujDok(id);
		session.Save();
		return new PostResponse(-1, "Dokument został pomyślnie anulowany");
	}
	else
	{
		return new PostResponse(0, "Sesja wygasła zaloguj się jeszcze raz do systemu");
	}
}

Błąd pojawia się w momencie próby stworzenia sesji (komentarz w kodzie) w metodzie CancelDocument().

1

A to nie jest tak że Ty w aplikacji dodałeś login ale nie ma go jeszcze w bazie erp'a a Ty próbujesz się na niego zalogować?

1

Ja już urlopem żyje chyba. Nakierowałeś mnie z tym, że "nie ma go jeszcze w bazie". Okazało się, że był, ale tworząc nowy dokument wylogowywałem się z ERP, a to najprawdopodobniej usuwa obiekt. Usuwając te dwie linijki wszystko działa jak trzeba...

application.UnlockApp();
application.LoginOut();

Błąd jest bardzo mylący. Uważam, że w wyjątku powinno być "czarno na białym", że ILogin jest null, a nie jakieś braki pamięci... Jestem debilem, ale to już pewnie wiecie. Dzięki 🙈

1 użytkowników online, w tym zalogowanych: 0, gości: 1