API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Moderator: mikey
API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Cześć!
Mam aplikację webową która korzysta z API Optimy. Na wersji produkcyjnej co jakiś czas dostaję błąd jak w tytule - nie jestem w stanie osiągnąć takiego błędu na maszynie developerskiej. Dane do logowania są poprawne - ten błąd nie występuje zawsze, większość logowań do API działa bez problemu, aplikacja (przeważnie) jest w stanie używając tych danych logować się i zapisywać dane / generować wydruki.
Aplikacja łączy się do Optimy poprzez API wyłącznie w celu zapisania danych lub generowania wydruków, odczyt następuje bezpośrednio z bazy, mam pewność że zawsze są dostępne licencje.
Po każdym zalogowaniu się i wykonaniu operacji następuje wylogowanie i są zwalniane wszystkie zasoby.
Mam aplikację webową która korzysta z API Optimy. Na wersji produkcyjnej co jakiś czas dostaję błąd jak w tytule - nie jestem w stanie osiągnąć takiego błędu na maszynie developerskiej. Dane do logowania są poprawne - ten błąd nie występuje zawsze, większość logowań do API działa bez problemu, aplikacja (przeważnie) jest w stanie używając tych danych logować się i zapisywać dane / generować wydruki.
Aplikacja łączy się do Optimy poprzez API wyłącznie w celu zapisania danych lub generowania wydruków, odczyt następuje bezpośrednio z bazy, mam pewność że zawsze są dostępne licencje.
Po każdym zalogowaniu się i wykonaniu operacji następuje wylogowanie i są zwalniane wszystkie zasoby.
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Cześć,
Czy w metodzie logowania do Optimy jest wskazana baza konfiguracyjna ?
Coś mi świta, że miałem podobny błąd. Optima była podłączona do innej baza konfiguracyjna na stanowisku niż autorski program.
Czy w metodzie logowania do Optimy jest wskazana baza konfiguracyjna ?
Coś mi świta, że miałem podobny błąd. Optima była podłączona do innej baza konfiguracyjna na stanowisku niż autorski program.
Pozdrawiam
Gabriel Gabzdyl 511 403 091 gabrielg@elte-s.com
Firma: https://elte-s.com/ Sklep: https://sklep.elte-s.com/
Gabriel Gabzdyl 511 403 091 gabrielg@elte-s.com
Firma: https://elte-s.com/ Sklep: https://sklep.elte-s.com/
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Hej,
Nie wskazuję bazy konfiguracyjnej - na serwerze jest zainstalowana Optima (czasami ktoś z niej korzystać) i przy instalacji / aktualizacji zawsze jest to ustawiane i sprawdzane. Poza tym dla tej instancji dostępna jest tylko jedna baza konfiguracyjna .
Na serwerze bez problemu odpalam Optimę używając tych samych poświadczeń i łącze się do poszczegolnych firm. Błąd pojawia się tylko w momencie wywoływania API, nie występuje zawsze - znaczna większość wywołań działa bez problemu. Czasami aplikacja nie może się w ogóle zalogować, tak jakby nie było dostępnych licencji (z tym sobie jakoś radzę), rzadziej zdarza się ten błąd.
Aplikacja próbuję w przypadku błędu połączenia łączyć się ponownie po kilku sekundach (random od 2 do 10), po kilku niepowodzeniach przestaje.
Nie wskazuję bazy konfiguracyjnej - na serwerze jest zainstalowana Optima (czasami ktoś z niej korzystać) i przy instalacji / aktualizacji zawsze jest to ustawiane i sprawdzane. Poza tym dla tej instancji dostępna jest tylko jedna baza konfiguracyjna .
Na serwerze bez problemu odpalam Optimę używając tych samych poświadczeń i łącze się do poszczegolnych firm. Błąd pojawia się tylko w momencie wywoływania API, nie występuje zawsze - znaczna większość wywołań działa bez problemu. Czasami aplikacja nie może się w ogóle zalogować, tak jakby nie było dostępnych licencji (z tym sobie jakoś radzę), rzadziej zdarza się ten błąd.
Aplikacja próbuję w przypadku błędu połączenia łączyć się ponownie po kilku sekundach (random od 2 do 10), po kilku niepowodzeniach przestaje.
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Dziwna sprawa, z ciekawości spróbowałem wywołać ten błąd i dostaje go tylko jak podam niepoprawny login użytkownika.
Co do licencji jak nie ma to i tak się zalogujesz do optimy przez api, tylko przy zapisie sesji jest błąd: program działa w trybie tylko do odczytu.
Nie mam pomysłu co może być tego przyczyną.
Co do licencji jak nie ma to i tak się zalogujesz do optimy przez api, tylko przy zapisie sesji jest błąd: program działa w trybie tylko do odczytu.
Nie mam pomysłu co może być tego przyczyną.
Pozdrawiam
Gabriel Gabzdyl 511 403 091 gabrielg@elte-s.com
Firma: https://elte-s.com/ Sklep: https://sklep.elte-s.com/
Gabriel Gabzdyl 511 403 091 gabrielg@elte-s.com
Firma: https://elte-s.com/ Sklep: https://sklep.elte-s.com/
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Dzięki za odpowiedź.
Na maszynie developerskiej mam to samo - taki błąd dostaję jedynie gdy podam nieprawidłowe dane. Może problem leży gdzieś indziej - dane do logowania do aplikacji są pobierane z innej aplikacji - może tam jest problem? Dzięki za nakierowanie
Przy okazji podrążę kwestie licencji - jeśli można. Ogólnie logowanie jest robione w taki sposób:
Całość działa w pętli, próbuje kilkukrotnie się połączyć w przypadku niepowodzenia....
później mam zapis do bazy danych i wylogowanie:
Jak pisałem - nie zawsze zapis jest możliwy, czasami dostaje wyjątek:
Czy możliwe jest że powyższy kod nie zwolni wykorzystywanej licencji?
Czy prawidłowy jest brak wywołania metody LockApp / UnlockApp ??
Na maszynie developerskiej mam to samo - taki błąd dostaję jedynie gdy podam nieprawidłowe dane. Może problem leży gdzieś indziej - dane do logowania do aplikacji są pobierane z innej aplikacji - może tam jest problem? Dzięki za nakierowanie
Przy okazji podrążę kwestie licencji - jeśli można. Ogólnie logowanie jest robione w taki sposób:
Kod: Zaznacz cały
try
{
Application = new Application();
Login = Application.Login(login, password, company);
Session = Login.CreateSession();
return true;
}
catch (Exception exc)
{
exception = new Exception(exc.Message, exc);
Session = null;
if (Application != null && Login != null)
{
Application.LoginOut();
}
Login = null;
Application = null;
Thread.Sleep(SleepTime);
}
później mam zapis do bazy danych i wylogowanie:
Kod: Zaznacz cały
protected void Disconnect(){
Application.LoginOut();
Session = null;
Login = null;
Application = null;
}
Kod: Zaznacz cały
System.Runtime.InteropServices.COMException: Aplikacja pracuje w trybie tylko do odczytu. Zapis nie jest możliwy.
Czy prawidłowy jest brak wywołania metody LockApp / UnlockApp ??
-
- Posty: 4
- Rejestracja: 12 cze 2019, 13:10
- Rola: Inny
- Wersja: 2019
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
A z czystej ciekawości spróbuj innym sposobem logowania, czy też będzie ten problem:
Upewnij się, że jesteś podłączony do poprawnej bazy konfiguracyjnej, jeśli masz ich więcej.
Kod: Zaznacz cały
Environment.CurrentDirectory = @"C:\Program Files (x86)\Comarch ERP Optima";
LoginService login = new LoginService();
ModuleCollection mc = new ModuleCollection() { Module.KasaBank, Module.Handel };
login.Login("OPERATOR", "HASŁO", "NAZWA_FIRMY", mc);
AdoSession Sesja = login.LoginInfo.CreateSession();
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
niestety to nie to...
firma ma kilka licencji na Optimę - jest to współdzielone między aplikację i pracowników.
Niestety z administrowania Optimą nie jestem zbyt biegły - czy istnieje możliwość podziału tych licencji na serwerze HASP w taki sposób, że użytkownicy mogą wykorzystać maksymalnie X - 1 licencji, gdzie X = liczba licencji? wtedy miałbym pewność że zawsze mam dostępną co najmniej jedną licencję dla aplikacji.
firma ma kilka licencji na Optimę - jest to współdzielone między aplikację i pracowników.
Niestety z administrowania Optimą nie jestem zbyt biegły - czy istnieje możliwość podziału tych licencji na serwerze HASP w taki sposób, że użytkownicy mogą wykorzystać maksymalnie X - 1 licencji, gdzie X = liczba licencji? wtedy miałbym pewność że zawsze mam dostępną co najmniej jedną licencję dla aplikacji.
-
- Posty: 4
- Rejestracja: 12 cze 2019, 13:10
- Rola: Inny
- Wersja: 2019
Re: API: System.Runtime.InteropServices.COMException: Operator nieznaleziony.
Możesz w konfiguracji Optimy ustawić domyślny klucz licencji na całą bazę oraz na konkretnego operatora. Błąd nie tyczy się klucza/licencji. Błąd tyczy się braku operatora w bazie konfiguracyjnej. Jeśli twierdzisz, że to klucz i chcesz się upewnić to wejdź do:
Konfiguracja -> Program -> Użytkowe -> Operatorzy -> wybierz operatora -> zakładka Bazy.
W kolumnie o nazwie Serwer klucza wpisujesz instancje SQL + dwa dwukropki + nr klucza (np. SERVER\SQL::123456789)
Sprawdź sobie zapytaniem SQL jakich masz operatorów w bazie konfiguracyjnej.
Sprawdź jaki masz connectionString w Optimie do bazy konfiguracyjnej w rejestrze.
HKEY_CURRENT_USER\Software\CDN\CDN Opt!ma\CDN Opt!ma\Login\KonfigConnectStr
Wrzucaj rezultaty. Coś zaradzimy
Konfiguracja -> Program -> Użytkowe -> Operatorzy -> wybierz operatora -> zakładka Bazy.
W kolumnie o nazwie Serwer klucza wpisujesz instancje SQL + dwa dwukropki + nr klucza (np. SERVER\SQL::123456789)
Sprawdź sobie zapytaniem SQL jakich masz operatorów w bazie konfiguracyjnej.
Kod: Zaznacz cały
SELECT * FROM CDN_KNF_Konfiguracja.CDN.Operatorzy
HKEY_CURRENT_USER\Software\CDN\CDN Opt!ma\CDN Opt!ma\Login\KonfigConnectStr
Wrzucaj rezultaty. Coś zaradzimy