Avatar billede mrbonus Novice
25. juli 2006 - 12:01 Der er 9 kommentarer og
1 løsning

Duplicate shared instance in memory

Jeg er ved at lave en service og en klient dertil, dette fungerer som det skal nu.
Hvis jeg genstarter min service fungerer det stadigvæk, de fleste af gangene, men ca 3-4 procent af gangene, sker der en mystisk fejl, klienten får ikke de data tilbage den skal have.

(Servicen indlæser filer der ligger i en mappe, og beholder så filinformationerne i en Shared instance af et object jeg selv har lavet. Dette er gjort for at det kun er servicen der en gang imellem skal kigge på filsystemet, hvor klienten, så bare spørger efter servicens oplysninger om filerne i hukommelsen.)

Jeg har prøvet at debugge mig frem til problemet, og når klienten spørger efter filoplysningerne, så er arraylisten med filoplysninger tom, men hvis jeg standser et kald til en anden metode som servicen anvender, så ligger der 8 filoplysninger i arraylisten. (disse 2 kald sker under samme runtime af servicen)
Så umiddelbart kigger de i 2 forskellige instanser i hukommelsen, jeg kan bare ikke helt forstå hvorfor. Mit bedste gæt er, at det sker når man genstarter servicen imens klienten har fat i den sharede instans, og den så ikke bliver slettet, og computeren så derfor beholder den sharede instans i hukommelsen. og opretter nr 2 sharede instans når servicen starter op igen.
Men det er jo kun spekulationer. Er der nogen der har kvalifikationer nok, til at lede mig på rette spor?
Avatar billede spif2001 Nybegynder
25. juli 2006 - 12:20 #1
Nu kommer jeg med et long shot, for jeg ved meget lidt om services.

Jeg lavede for et stykke tid siden en COM+ service, og for at kalde det samme object i stedet for et nyt hver gang, skulle jeg have attributten Transaction på min klasse der blev kaldt på:

[CODE]
using System.EnterpriseServices;

[Transaction(TransactionOption.Required)]
public class ComCommunicator : ServicedComponent
{
  private static int callNumber = 1;

  public ComCommunicator(){}//constructor

  public string DoTrans()
  {   
      return "Kald nr " + callNumber++;
  }
}
[/CODE]

ServicedComponent er den klasse man nedarver fra for at lave et COM+ service klasse.

Metoden DoTrans() kaldte jeg som test fra et simpelt vbscript:

[SCRIPT]
Set o = createobject("FunkiCommunicator.COMCommunicator")
MsgBox o.DoTrans()   
MsgBox o.DoTrans()
[/SCRIPT]

Når jeg kørte scriptet flere gange, blev den ved med at tælle op, når attributten var på. Når den ikke var på, talte den kun til 2 ved alle kørsler af scriptet.

Anyway så tror jeg du skal have fat i de rigtige attributter, men eftersom jeg ikke er en haj til det, skal der nok flere på banen for at hjælpe dig.
Avatar billede mrbonus Novice
25. juli 2006 - 12:39 #2
Nu skal det lige siges, at jeg har lavet en form, som imiterer servicen under debug, så det er noget nemmere at debugge i.

Det kan da godt lyde fornuftigt, men som du selv siger, har jeg nok brug for nogen flere til at hjælpe mig.
Avatar billede arne_v Ekspert
26. juli 2006 - 02:17 #3
windows service ?
Avatar billede mrbonus Novice
26. juli 2006 - 08:30 #4
Ja en windows service, jeg har lavet projektet i vb.net, men mente at spørgsmålet hørete til .NET generelt
Avatar billede arne_v Ekspert
27. juli 2006 - 02:08 #5
det er helt fint - jeg ville bare vide hvad det var

afhænger problemet af hvor længe servicen er stoppet ?

og det er en static variabel ?

og du leger ikke med app domains ?
Avatar billede mrbonus Novice
27. juli 2006 - 08:05 #6
Jeg ved ikke om det afhænger af hvor længe servicen er stoppet, da fejlen sker mere eller mindre tilfældigt.

Ja det er et static object fejlen opstår ved, der er den der ser ud til at være 2 instanser af.

Nej jeg lejer ikke med app domains.
Avatar billede mrbonus Novice
27. juli 2006 - 08:07 #7
Men der kan ikke være 2 instanser af den i samme applikation, da jeg har gjort det statiske objekt til et "Singleton" object
Avatar billede mrbonus Novice
27. juli 2006 - 08:13 #8
Jeg laver dog synclock på arraylister når der hentes og skrives til dem, for at skabe threadsafe arraylists, hvis det kan have noget at skulle have sagt.
Avatar billede arne_v Ekspert
28. juli 2006 - 02:56 #9
jeg har ingen gode ideer
Avatar billede mrbonus Novice
15. august 2006 - 14:36 #10
piv, nå problemet opstår sjældent, så må jeg bare håbe at det ikke kommer og bider mig i nummeren.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester