Wylogowanie z aplikacji kończy się wyjątkiem

0

Witam tworze aplikacje webową (Blazor WebAssembly) korzystającą z ERP API (Comarch, ERPXL API). Logowanie działa ok. ale próba wylogowania się kończy się wyrzuceniem wyjątku

System.Runtime.InteropServices.SEHException: „External component has thrown an exception

Dodam ze wcześniej stworzyłem podobna aplikację tylko, że w Windows Forms i wszystko działa ok- logowanie -wylogowanie i zakładanie dokumentów. itp

3

Trochę więcej info będzie potrzebne. Sama treść wyjątku nic nie mówi. Jakiś stacktrace? InnerException? Wrzuć wszystko co masz z tym wyjątkiem.

PS.
Rozumiem, że faktycznie chodzi o Comarch XL?

0

Tak - Comarch ERP XL.screenshot-20231221104102.png)

Błąd wyskakuje przy tej linijce

int res = cdn_api.cdn_api.XLLogout(sesjaId);
1

Uwielbiam te błędy z Comarchu 😅 Jeszcze stacktrace z głównego wyjątku mi wrzuć. Inner widzę, że jest null. Wrzuć wszystko co związane z tym błędem

1

@damkon: Czy każdą bibliotekę można użyć w projekcie Blazor od tak? Bo jeśli w WinForms działa a jako WASM nie to szukałbym tutaj rozwiązania, że może jednak nie do końca ta biblioteka może działać w przeglądarce jako WASM.

2

@PawelLukasik: On twierdzi, że się zalogował, a ja twierdzę, że nie udało się zalogować ale podczas logowanie nie ma wyjątku. Sesja przekazana w Logout jest niepoprawna

XL zwraca inty jako status logowania

-9    - operator nie jest podpięty do żadnego centrum

-8    - nie podano nazwy bazy

-7    - baza niezarejestrowana w systemie

-6    - nie podano hasła lub brak operatora

-5    - nieprawidłowe hasło

-4    - konto operatora zablokowane

-3    - nie podano nazwy programu (pole ProgramID)

-2    - błąd otwarcia pliku tekstowego, do którego mają być zapisywane komunikaty. Nie znaleziono ścieżki lub nazwa pliku jest nieprawidłowa.

-1    - podano niepoprawną wersję API

0     - logowanie powiodło się

1     - inicjalizacja nie powiodła się

2     - występuje w przypadku, gdy istnieje już jedna instancja programu i nastąpi ponowne logowanie (z tego samego komputera i na tego samego operatora)

3     - występuje w przypadku, gdy istnieje już jedna instancja programu i nastąpi ponowne logowanie z innego komputera i na tego samego operatora, ale operator nie posiada prawa do wielokrotnego logowania

5     - występuje przy pracy terminalowej w przypadku, gdy operator nie ma prawa do wielokrotnego logowania i na pytanie czy usunąć istniejące sesje terminalowe wybrano odpowiedź ‘Nie’.

61   - błąd zakładania nowej sesji

@damkon jaki masz status podczas logowania?

1

Stad wiem ze się zalogowałem bo sprawdziłem w Comarchu listę sesji i tam pojawia się nazwa aplikacji która podałem przy logowaniu korzystając z API. Zwraca 0 czyli poprawne zalogowanie sie

1

@AdamWox może tak być, jednakże IMO trochę to dziwne aby w takim przypadku leciał wyjątek. I to jeszcze z kategorii SEHException?

1

W przypadku Comarchu to nie jest dziwne, ponieważ wszystko co Comarch pisze to COM Object i ActiveX. Dodatkowo XL jest pisany w Clarionie, więc pewnie trzeba było zrobić jakiś "comowy" wrapper, aby to obsłużyć poprawnie.

0

Hmmm. Ma ktoś jakiś pomysł aby to jakoś obejść - ewentualnie użyć innej technologii -tylko jakiej ?

1

Ja nie twierdzę, że to jest nie do zrobienia. Zwyczajnie nie jestem w stanie powiedzieć co trzeba zrobić w kwestii XLa żeby działało, bo nie wiele pod XLa robiłem, a druga sprawa to problemem głównym może być webassembly. Ja robiłem projekt fullstackowy do Optimy używając .NET 6/7/8 WebAPI + Angular. Na pewne rzeczy trzeba zwracać uwagę pisząc taki projekt pod produkty Comarchu. Na początku jest to bardzo czasochłonny proces, ponieważ w necie nie znajdziesz co błąd oznacza, mogą cię tylko niektóre wpisy nakierować na rozwiązanie problemu.

0

Szczegóły wyjątku


System.Runtime.InteropServices.SEHException
  HResult=0x80004005
  Message=External component has thrown an exception.
  Source=<Nie można ocenić źródła wyjątku>
  Ślad stosu:
<Nie można ocenić danych śledzenia>
1

Bardzo stary wątek, ale może cię nakieruje i coś pomoże.

0

W aplikacja Winforms i ASP.NET Webforms trzeba zmienić platformę docelowa na 32 bitowa. Spróbuj zmienić we właściwościach projektu Traget platform na x86 i przekompilować projekt.

0

Normalnie dostając Interop exception z COM można zrobić zrzut pamięci, załadować w windbg i zazwyczaj zobaczyć realną treść i źródło exceptiona, ale nie wiem jak to działa w przypadku blazora.

A sesja normalnie znika i wylogowuje z systemu i wszystko inne działa? Jak tak to olej to, owrapuj w try catcha, zgłoś buga do comarchu, jako tako i pora na csa

2

Ok. problem rozwiązany. Wystarczy dodać

[DllImport("ClaRUN.dll")]
public static extern void AttachThreadToClarion();

Następnie w wywołaniu logowania dodać na początku AttachThreadToClarion();

Wielkie dzięki dla AdamWox za przeslanie linka.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.