enova dla profesjonalistów
Profil
Wyszukaj
Wyszukaj:
Odpowiedz
Webservice - pierwsze połączenie
Użytkownik
Postów: 5
Punkty: 9
Witam,
na nowym kompie, na którym postawiłem webservice mam drobne problemy z połączeniem. Przy pierwszym połączniu wywala błąd:
Kod:
System.Exception: System.TypeInitializationException: Inicjator typów zgłosił wyjątek dla typu 'Soneta.Business.UI.PageInfoCache'. ---> System.UnauthorizedAccessException: Odmowa dostępu do ścieżki „Soneta”.
w System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
w System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
w System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
w Soneta.Business.UI.PageInfoCache..ctor()
w Soneta.Business.UI.PageInfoCache..cctor()
--- Koniec śladu stosu wyjątków wewnętrznych ---
w Soneta.Business.App.Role.GetAssembliesIdents()
w Soneta.Business.App.Role.initIdents(Dictionary`2 modules, Dictionary`2 types)
w Soneta.Business.App.Role.initTypes()
w Soneta.Business.App.Role.GetPermission(Type dataType)
w Soneta.Business.App.Role.get_Item(Type dataType)
w Soneta.Business.Table.get_AccessRightInternal()
w Soneta.Business.Table.get_AccessRight()
w Soneta.Business.Row.InitAccessRight()
w Soneta.Business.Row.get_AccessRight()
w Soneta.Business.Row.GetRecord()
w Soneta.Business.App.Login.loadRoles(Session session)
w Soneta.Business.App.Login.checkRole(Session session)
w Soneta.Business.App.Database.LoginHelper.Login(LoginArgs args)
w Soneta.Business.App.Database.LoginHelper.Login(LoginParameters parameters)
w Soneta.Business.App.Database.Login(Boolean winAuth, String user, String password)...


przy kolejnym połączniu już błędu nie ma. Po kilkunastu minutach jak nie jest webservice wykorzystywany to znów się błąd pojawia (tak samo jak zrestartuje serwer). Co może być tego przyczyną?
Offline
Profil
Wiadomość
Global Admin
Magnat
Postów: 73
Pochwały: 10
Punkty: 126
Witam,

Prawdopodobnie chodzi o to, że mechanizm optymalizacji IIS wyładowuje nieużywane DLL`ki Sonety, co powoduje błędy dostępu to metod API enova.
Rozwiązaniem jest ładowanie DLL`ek za każdym startem sesji webowej użytkownika:

Kod:
protected void Session_Start(object sender, EventArgs e)
{
...
loadModules();
...
}

private void loadModules()
{
// ładowanie wykorzystywanych bibliotek
loadAssembly("Soneta.Types");
loadAssembly("Soneta.Business");
loadAssembly("Soneta.Core");
loadAssembly("Soneta.CRM");
loadAssembly("Soneta.CzlonkowieSzkolenia");
loadAssembly("Soneta.Deklaracje");
loadAssembly("Soneta.Handel");
loadAssembly("Soneta.KadryPlace");
loadAssembly("Soneta.Kasa");
loadAssembly("Soneta.Ksiega");
loadAssembly("Soneta.Zadania");
}


// update:
Kod:
void loadAssembly(string name)
{
try
{
string assemblyPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/bin");
if (name.IndexOf('/') < 0 && name.IndexOf('\\') < 0)
{
name += ".dll";
name = Path.Combine(assemblyPath, name);
}

Assembly ass = Assembly.LoadFrom(name);
lock (assemblies)
assemblies[ass.GetName().Name] = ass;
}
catch { }

}
___________________
Ostatnio zmodyfikowany przez Wojtek 2017-10-26 17:10:36
Offline
Profil
Wiadomość
Użytkownik
Postów: 2
Punkty: 2
Witam,

Jestem początkującym programistą enova i szukam informacji jak stworzyć webservice. Mam dostęp jako partner do portalu, ale jakoś nie mogę tam odszukać interesującej mnie informacji. Czy mógłby ktoś wskazać jakiś przykład tak na początek.
___________________
Ostatnio zmodyfikowany przez Klyn 2017-11-28 14:18:40
Offline
Profil
Wiadomość
Global Admin
Magnat
Postów: 73
Pochwały: 10
Punkty: 126
Witam,

Proponuję załatwić sobie jeszcze dostęp do http://dok.enova365.pl lub zobaczyć przykłady na GitHubie https://github.com/soneta/Examples jest tam przykład webservice.
Offline
Profil
Wiadomość
Użytkownik
Postów: 2
Punkty: 2
Dzięki już widzę.
Offline
Profil
Wiadomość
Odpowiedz
Powered by MWCMS.php       MAGNAT © 2011 All rights reserved.       Copyright © 2011 BY Magnat Sp. z .o.o.
PHP  MySQL  SMARTY  XHTML 1.1  CSS