Page 1 of 1

System.DllNotFoundException

Posted: Mon 07 May 2012, 18:20
by nilzen
Hej,

Efter att det löste sig med returnWhenUp -> returnwhenup casingen i querystringen för sunstate så lyckades jag ändå inte få in värdet som en datakälla och efter en stunds letande så hittade jag detta i loggen på servern (dum som jag var letade jag i klientens loggar först utan att se ngt)

Code: Select all

{BusinessAccessDataCollection - Collection} --<Error> -- 2012-05-07 19:07:14 -- Failed to collect data for data source with id 3 and name Solens läge. Exception:
System.DllNotFoundException

Level 1) advapi32.dll

StackTrace for Level 1:
  at (wrapper managed-to-native) SwitchKing.Server.BusinessAccess.Helpers.Impersonator:RevertToSelf ()
  at SwitchKing.Server.BusinessAccess.Helpers.Impersonator.ImpersonateValidUser (System.String userName, System.String domain, System.String password) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.Helpers.Impersonator..ctor (System.String userName, System.String domainName, System.String password) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.File.SimpleFlatFileCollector.ReadFromSource () [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.File.SimpleFlatFileCollector.Collect () [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Engines.DataCollectorEngine.Collect (SwitchKing.Common.Entities.DataSource src, SwitchKing.Server.BusinessAccess.DataCollection.DataSourceEntity& srcAccess, SwitchKing.Server.BusinessAccess.DataCollection.DataSourceValueEntity& valueAccess, SwitchKing.Server.BusinessAccess.EntityLogEntryEntity& logAccess) [0x00000] in <filename unknown>:0
Men det bör väl gå att att lösa med "preprocessor directives"?

Code: Select all

#if __MonoCS__
 //mono-kod
#else 
 //windowsspecifik pinvoke-kod
#endif

Re: System.DllNotFoundException

Posted: Mon 07 May 2012, 19:08
by Martin
Kanske går att lösa med preprocessor directives, men frågan är vad som är motsvarande Mono-kod...
Det är ju trots allt någon form av impersonation som krävs (eftersom det är valt i klienten).

Re: System.DllNotFoundException

Posted: Tue 08 May 2012, 14:01
by nilzen
Vet inte om jag tänkt fel när jag angett användarnamn och lösen där, men för basic authentication behövs väl inte riktig impersonation? Det går väl att sätta en request-header som löser det?

Testade att lägga på användarnamn och lösenord i uri:n men det gick inte.

Code: Select all

http://usr:pass@ip:8800/extendedservices/calculations/sunstate?returnwhenup=up&returnwhendown=down

Code: Select all

Level 1) parameters do not match signature

StackTrace for Level 1:
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0
  at SwitchKing.Common.Reflection.UriTemplateInvoker.InvokeRESTCallByUriTemplate (System.String originalUrl, System.Type contractType, System.Object contractInstance) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.RESTServices.RESTCollectorOverrider.GetDataFromSource (System.Uri address) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.CollectByCollectorOverrider (System.Uri address) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.GetDataFromSource_Http (System.Uri address, SwitchKing.Server.BusinessAccess.DataCollection.CollectorStatus& status, System.String& data) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.GetDataFromSource (System.Uri address, SwitchKing.Server.BusinessAccess.DataCollection.CollectorStatus& status, System.Exception& ex) [0x00000] in <filename unknown>:0
{BusinessAccessDataCollection - Collection} --<Error> -- 2012-05-08 14:58:34 -- Failed to collect data from Uri http://usr:pass@ip:8800/extendedservices/calculations/sunstate?returnwhenup=up&returnwhendown=down. Exception:
System.Reflection.TargetParameterCountException

Re: System.DllNotFoundException

Posted: Tue 08 May 2012, 14:35
by Martin
Stämmer - impersonation ska inte behövas när det gäller Http och Basic.

Om du dessutom använder localhost så ska servern se att du försöker gå mot din egen server och ska alltså inte göra en roundtrip ut, för att sedan vända tillbaka. Den ska gå direkt internt istället.
Dock blir "känsligheten" högre när servern försöker lista ut vilken metod det egentligen är du försöker accessa, och kräver att alla parametrar är med.

Hela anropet ser ut så här, om jag har rätt för mig:

Code: Select all

http://servernamn:8800/extendedservices/calculations/sunstate?date={date}&returnwhenup={returnWhenUp}&returnwhendown={returnWhenDown}&offset={offset}
Felmeddelandet säger att den inte hittar en metod med de parametrar som du angett i adressen. Prova gärna att kasta med "date=" (alltså "tomt" datum) och "offset=0".
Det ska göra att servern tar dagens datum med 0 minuters offset = "verklig" soluppgång.

Re: System.DllNotFoundException

Posted: Tue 08 May 2012, 19:08
by nilzen
Testat att köra mot ip-nummer och localhost, samma felmeddelande tyvärr:

Code: Select all

{BusinessAccessDataCollection - Collection} --<Error> -- 2012-05-08 20:06:11 -- Failed to collect data from Uri http://localhost:8800/extendedservices/calculations/sunstate?returnwhenup=up&returnwhendown=down&offset=0&date=. Exception:
System.Reflection.TargetInvocationException

Level 1) Exception has been thrown by the target of an invocation.
Level 2) Object reference not set to an instance of an object

StackTrace for Level 1:
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0
  at SwitchKing.Common.Reflection.UriTemplateInvoker.InvokeRESTCallByUriTemplate (System.String originalUrl, System.Type contractType, System.Object contractInstance) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.RESTServices.RESTCollectorOverrider.GetDataFromSource (System.Uri address) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.CollectByCollectorOverrider (System.Uri address) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.GetDataFromSource_Http (System.Uri address, SwitchKing.Server.BusinessAccess.DataCollection.CollectorStatus& status, System.String& data) [0x00000] in <filename unknown>:0
  at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.AbstractCollector.GetDataFromSource (System.Uri address, SwitchKing.Server.BusinessAccess.DataCollection.CollectorStatus& status, System.Exception& ex) [0x00000] in <filename unknown>:0

Re: System.DllNotFoundException

Posted: Tue 08 May 2012, 19:17
by Martin
Har lagt upp detta som en bugg för test:
http://bugnet.switchking.se/Issues/Issu ... spx?id=406