Skocz do zawartości

Sfera / InsERT.Mox.Security.LicenceException

Polecane posty

Na jednym komputerze u klienta mamy problem z uruchomieniem połączenia ze Sferą.

Przy próbie połączenia pojawia się wyjątek:

Typ wyjątku: InsERT.Mox.Security.LicenceException
Wiadomosć błędu: Dane licencyjne nie zostały wczytane.
TargetSite: Void Finalize()
Source: InsERT.Moria.Security
HResult: -2146233088
StackTrace:    w lTU=.Vjg=.Wzg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w InsERT.Mox.Security.CriticalException.Finalize()
---------- INNER EXCEPTION ---------------

Typ wyjątku: System.IO.FileNotFoundException
Wiadomosć błędu: Nie można załadować pliku lub zestawu 'InsERT.Moria.Security.Core.dll' lub jednej z jego zależności. Nie można odnaleźć określonego modułu.
TargetSite: System.Object MTY=(System.Object ByRef, System.Object[], Boolean, System.Reflection.MethodBase, Boolean)
Source: InsERT.Mox.VMPackage.31.0.0.3698
HResult: -2147024770
StackTrace:    w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.SDg=.Tjg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)

Na innym komputerze do tej samej bazy podmiotu i tej samej wersji nexo udaje się podłączyć bez żadnego problemu.
Sprawdzaliśmy nasz program z najnowszą wersją Subiekta nexo i też u nas działa.

Mechanizm połączenia nie był zmieniany od jakiegoś  czasu i działa już u wielu klientów.

Łączymy się za pomocą kodu:

DanePolaczenia  danePolaczenia = DanePolaczenia.Jawne(serwer: konfiguracja.Serwer,
                    baza: konfiguracja.BazaDanych,
                    autentykacjaWindowsDoSerwera: konfiguracja.AutoryzacjaWindows,
                    uzytkownikSerwera: konfiguracja.Uzytkownik,
                    hasloUzytkownikaSerwera: konfiguracja.Haslo ?? string.Empty);

MenedzerPolaczen mengerPolaczen = new MenedzerPolaczen();
            mengerPolaczen.DostepDoUI = false;

Uchwyt sfera = mengerPolaczen.Polacz(danePolaczenia, ProductId.Subiekt);
var czyZalogowany = sfera.ZalogujOperatora(uzytkownik.Login, uzytkownik.Haslo);

Aby nasze rozwiązanie działało to kopiujemy wszystkie binarki z katalogu podmiotu do katalogu wykonywalnego naszej aplikacji.
Nazwę katalogu z binariami sprawdzaliśmy w programie serwisowym (szczegóły podmiotu).
Podmieniamy bibliotekę Newtonsoft.Json.dll, gdyż u nas jest wersja 12 a w nexo 10.
Nie stanowi to jednak problemu na innych komputerach, więc raczej nie tu tkwi problem.

Do serwera Subiekta nexo łączymy się za pomocą loginu/hasła. Zakładamy że skoro na tym samym podmiocie działa poołączenie na innym komputerze to użytkownik bazy danych ma odpowiednie uprawnienia.
Próbowaliśmy też używać różnych użytkowników Subiekta nexo - bez rezultatu.

Próbowaliśmy używać binariów kopiowanych z działającego komputera - jest ten sam efekt.

Biblioteka InsERT.Moria.Security.Core.dll jest w katalogach:
- x64
- x86
Próbowaliśmy ją kopiować do katalogu głównego aplikacji, jednak nic to nie dało.

Windows został zaktualizowany.
Subiekt nexo był przeinstalowany.
Próbowaliśmy usuwać zawartość folderu 'AppData\Local\InsERT\Deployments\.zip-cache' (taka porada była w jednym wątku na forum)
Niestety nic nie pomaga.

Dane komputera:

Wersja SQL: 2014 STANDARD
Wersja Windows: Windows 10, wersja 2004, 64 bit
Zainstalowany Microsoft Visual C++ 2015 Redistributable (x86) – 14.0.24215
Nexo Pro w wersji 31.0.0 (3698)

 

Nie mamy już pomysłu czego próbować, dlatego też zwracamy się z prośbą o pomoc :)


 

Edytowane przez Piotr Taraszkiewicz
Link to postu
  • 3 tygodnie później...
3 godziny temu, Jerzy Dudra napisał:

Jeżeli rozwiązanie jest wdrażane przez kopiowanie binariów z SDK, to plik InsERT.Moria.Security.Core.dl (z podkatalogu x86) powinien być skopiowany do katalogu z binariami SDK.

Pozwolę sobie napisać własnymi słowami: plik powinien być skopiowany do katalogu gdzie trafiły binaria z SDK (czyli katalogu z plikami wykonywalnymi naszego programu)?
Plik ten powinien trafić do katalogu głównego czy zostać w ktalogu x86?

Próbowaliśmy uruchamiać jak plik InsERT.Moria.Security.Core.dll zostawał w katalogu x86 i przenosiliśy go do katalogu głównego z plikami wykonywalnymi naszego programu (ten sam rezultat).

Binaria są kopiowane z katalogu na danym komputerze tworzonym przez Subiekta nexo:

C:\Users\Piotr\AppData\Local\InsERT\Deployments\Nexo\LC SOFT_v2adb8e4a7d3924e55a85697\Binaries

Sprawdzamy w programie serwisowym nazwę katalogu z binariami (na wszelki wypadek aby mieć pewność).
Kopiujemy wszystkie biblioteki wraz z folderami do katalogu z plikami wykonywalnymi naszego programu.
Ta procedura działa na kilkunastu podmiotach i nie możemy dojść dlaczego w tym przypadku nie chce się uruchomić.

1. Czy możliwe że katalog w którym nexo przechowuje swoje binaria nie ma wszystkich bibliotek z SDK? (może trzeba skopiować biblioteki z SDK + model danych + security z katalogu binariów na danym komputerze)?
2. Czy jeżeli na każdym stanowisku jest ten sam podmiot i ta sama wersja Subiekta nexo, to czy można kopiować binaria z innego stanowiska komputerowego czy musi być zawsze ten sam komputer?

 

Link to postu

Opisana przez Pana procedura wygląda prawidłowo.

Jeżeli kopiował Pan pliki z folderu, którego używa nexo (tak jak Pan to opisał) to plik InsERT.Moria.Security.Core.dll  raczej jest tam gdzie trzeba.

Plik InsERT.Moria.Security.Core.dll  powinien być tam gdzie binaria nexo (nie w folderze x86).

Czy rozważał Pan wdrożenie rozwiązania poprzez pakiet.

Takie rozwiązanie umieszcza aplikację w folderze z binariami nexo.

W SDK opisano jak utworzyć i wdrożyć pakiet z rozwiązaniem własnym

(Wdrazamy_rozwiazanie_dla_nexo_PRO_wykorzystujace_Sfere_nexo.pdf, Tworzymy_nowe_rozwiazanie_dla_Sfery_nexo_w_MS_Visual_Studio_2017.pdf  )

 

Link to postu
Dnia 10.08.2020 o 21:59, Jerzy Dudra napisał:

Czy rozważał Pan wdrożenie rozwiązania poprzez pakiet.

Na dzień dzisiejszy utworzenie takiego rozwiązania nie jest możliwe.

 

Próbowaliśmy podejść jeszcze raz do weryfikacji.

W binariach nexo na komputerze plik InsERT.Moria.Security.Core.dll jest dostępny w dwóch folderach:
- x64
- x86

Jeżeli do katalogu głównego z plikami wykonywalnymi przenieśliśmy plik InsERT.Moria.Security.Core.dll z katalogu x86, to otrzymujemy komunikat błędu BadImageFormatException

------------ SYSTEM INFORMATION -------------

Aplikacja (entry): ProstaPaczka, Version=20.8.1.0, Culture=neutral, PublicKeyToken=null
Aplikacja (calling): ProstaPaczka.View, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Aplikacja (executing): ProstaPaczka.Model, Version=1.0.45.0, Culture=neutral, PublicKeyToken=null
Data: 12.08.2020 14:08:37
System: Microsoft Windows NT 6.2.9200.0
Wersja środowiska: 4.0.30319.42000
.NET Framework: 4.7.2 or later
Nazwa maszyny:xxxxx
Czy 64 bit: True
Czy administrator: True
Katalog roboczy: C:\Program Files (x86)\LCSoft\ProstaPaczka
Katalog danych: C:\ProgramData\LCSoft\ProstaPaczka

---------- MAIN EXCEPTION ---------------

Typ wyjątku: InsERT.Mox.Security.LicenceException
Wiadomosć błędu: Dane licencyjne nie zostały wczytane.
TargetSite: Void Finalize()
Source: InsERT.Moria.Security
HResult: -2146233088
StackTrace:    w lTU=.Vjg=.Wzg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w InsERT.Mox.Security.CriticalException.Finalize()


---------- INNER EXCEPTION ---------------

Typ wyjątku: System.BadImageFormatException
Wiadomosć błędu: Nie można załadować pliku lub zestawu 'InsERT.Moria.Security.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f3ef93a6b458098' lub jednej z jego zależności. Próbowano załadować program w niepoprawnym formacie.
TargetSite: System.Object MTY=(System.Object ByRef, System.Object[], Boolean, System.Reflection.MethodBase, Boolean)
Source: InsERT.Mox.VMPackage.31.0.0.3698
HResult: -2147024885
StackTrace:    w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.SDg=.Tjg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)

Jeżeli do katalogu z plikami wykonywalnymi wstawimy plik InsERT.Moria.Security.Core.dll z katalogu x64 to otrzymujemy wyjątek FileNotFoundException


------------ SYSTEM INFORMATION -------------

Aplikacja (entry): ProstaPaczka, Version=20.8.1.0, Culture=neutral, PublicKeyToken=null
Aplikacja (calling): ProstaPaczka.View, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Aplikacja (executing): ProstaPaczka.Model, Version=1.0.45.0, Culture=neutral, PublicKeyToken=null
Data: 12.08.2020 14:12:22
System: Microsoft Windows NT 6.2.9200.0
Wersja środowiska: 4.0.30319.42000
.NET Framework: 4.7.2 or later
Nazwa maszyny: xxxx
Czy 64 bit: True
Czy administrator: True
Katalog roboczy: C:\Program Files (x86)\LCSoft\ProstaPaczka
Katalog danych: C:\ProgramData\LCSoft\ProstaPaczka

---------- MAIN EXCEPTION ---------------

Typ wyjątku: InsERT.Mox.Security.LicenceException
Wiadomosć błędu: Dane licencyjne nie zostały wczytane.
TargetSite: Void Finalize()
Source: InsERT.Moria.Security
HResult: -2146233088
StackTrace:    w lTU=.Vjg=.Wzg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w InsERT.Mox.Security.CriticalException.Finalize()


---------- INNER EXCEPTION ---------------

Typ wyjątku: System.IO.FileNotFoundException
Wiadomosć błędu: Nie można załadować pliku lub zestawu 'InsERT.Moria.Security.Core.dll' lub jednej z jego zależności. Nie można odnaleźć określonego modułu.
TargetSite: System.Object MTY=(System.Object ByRef, System.Object[], Boolean, System.Reflection.MethodBase, Boolean)
Source: InsERT.Mox.VMPackage.31.0.0.3698
HResult: -2147024770
StackTrace:    w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.SDg=.Tjg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)

Pobraliśmy też SDK w wersji 30.1.0 i skopiowaliśmy binaria z SDK (Model danych wstawiliśmy z podmiotu), plik InsERT.Moria.Security.Core.dll wstawiliśmy z katalogu x86 (w SDK nie ma katalogu x64). Przy tej próbie komunikat się nieco zmienił: FileNotFoundException / DirectoryNotFoundException


------------ SYSTEM INFORMATION -------------

Aplikacja (entry): ProstaPaczka, Version=20.8.1.0, Culture=neutral, PublicKeyToken=null
Aplikacja (calling): ProstaPaczka.View, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Aplikacja (executing): ProstaPaczka.Model, Version=1.0.45.0, Culture=neutral, PublicKeyToken=null
Data: 12.08.2020 15:05:05
System: Microsoft Windows NT 6.2.9200.0
Wersja środowiska: 4.0.30319.42000
.NET Framework: 4.7.2 or later
Nazwa maszyny: xxxx
Czy 64 bit: True
Czy administrator: True
Katalog roboczy: C:\Users\Admin\Desktop\ProstaPaczka
Katalog danych: C:\ProgramData\LCSoft\ProstaPaczka

---------- MAIN EXCEPTION ---------------

Typ wyjątku: InsERT.Mox.Security.LicenceException
Wiadomosć błędu: Dane licencyjne nie zostały wczytane.
TargetSite: Void Finalize()
Source: InsERT.Moria.Security
HResult: -2146233088
StackTrace:    w lTU=.Vjg=.Wzg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w InsERT.Mox.Security.CriticalException.Finalize()


---------- INNER EXCEPTION ---------------

Typ wyjątku: System.IO.FileNotFoundException
Wiadomosć błędu: Nie można załadować pliku lub zestawu 'InsERT.Moria.Security.Core.dll' lub jednej z jego zależności. System nie może odnaleźć określonej ścieżki.
TargetSite: System.Object MTY=(System.Object ByRef, System.Object[], Boolean, System.Reflection.MethodBase, Boolean)
Source: InsERT.Mox.VMPackage.31.0.0.3698
HResult: -2147024893
StackTrace:    w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w InsERT.Mox.Security.LicenceController.<>c__DisplayClass16_0.<RefreshInternal>b__0()
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.xEQ=.yEQ=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)
   w lTU=.ljY=.mTY=(zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SzY=(FDY= vmMethod, zDU= ctx)
   w VMRuntime.Libraries.CSVMRuntime.SjY=(Assembly asm, String id, Object[] args)
   w VMRuntime.Libraries.CSVMRuntime.RunMethod(String id, Object[] args)
   w wRM=.sBQ=.sRQ=(Action action, Int32 retryCount)
   w lTU=.JjY=.MTY=(Object& instance, Object[] methodArgs, Boolean isNullNullable, MethodBase methodBase, Boolean isVirtualCall)
   w lTU=.SDg=.Tjg=(zDU= )
   w lTU=.ljY=.mTY=(zDU= ctx)


------------ INNER EXCEPTION ------------

Typ wyjątku: System.IO.DirectoryNotFoundException
Wiadomosć błędu: System nie może odnaleźć określonej ścieżki. (Wyjątek od HRESULT: 0x80070003)
HResult: -2147024893

Plik istnieje, więc może nie udało się wczytać dodatkowych zlaeżności biblioteki InsERT.Moria.Security.Core.dll.
Ma ona jakieś zależności, które moglibyśmy sprawdzić (czy rzeczywiście są)?

Link to postu

Akurat aplikacja jest pisana w Rier (JetBrains), ale to nie powinno mieć znaczenia.
Aplikacja jest kompilowana w ustawieniu Any CPU.
Jest to aplikacja "pudełkowa" więc tego samego mechanizmu używa wielu klientów.

Na stanowisku developerskim mam podobne ustawienie Win 10 64 bit i nie napotkałem nigdy takich problemów. U kilkunastu podmiotów połączenie ze Sferą działa bez problemów. Na serwerze u tego klienta aplikacja też się łączy i pracuje.

 

Link to postu

Proszę zatem zerknąć do dokumentacji sfery, gdzie w pierwszych krokach można znaleźć:

Cytat

2. Skonfigurowanie projektu. We właściwościach projektu (Project - Properties) w zakładce Application należy ustawić Target framework na .NET Framework 4.6.1, a w zakładce Build właściwość Platform target na x86.

image.thumb.png.72d2ef3fd3f53f06e6efc1c2d3508333.png

  • Dziękuję 1
Link to postu

Nie wydaje mi się żeby to było problemem, bo by taki sam stan rzeczy wydarzył się u innych podmiotów albo na naszych stanowiskach a na razie nie wystąpił nigdzie indziej.

EDIT:
Rozumiem że przyczyną może być próba uruchomienia procesu 32 bitowego (Sfera) z poziomu procesu 64 bitowego (nasza aplikacja)?
Spróbujemy jeszcze wymusić uruchamianie naszej aplikacji w trybie 32 bitowym na maszynie 64 bitowej.

Edytowane przez Piotr Taraszkiewicz
Link to postu

Po wymuszeniu uruchomienia naszego rozwiązania jako proces 32 bitowy za pomocą narzędzia CorFlags Sfera uruchamia się bez problemu.
Nie udało się ustalić dlaczego akurat na tych komputerach nie działał standardowy sposób jak u innych podmiotów i na stanowiskach developerskich.

Wymuszenie wygląda następująco:

CorFlags.exe "C:\Program Files (x86)\LCSoft\ProstaPaczka\ProstaPaczka.exe" /32bitreq+

Dziękuję za pomoc i podpowiedzi :)

Link to postu
×
×
  • Dodaj nową pozycję...