Avatar billede jensen2005 Nybegynder
30. august 2007 - 20:15 Der er 8 kommentarer og
1 løsning

Læse og skrive xml fil på samme tidspunkt

Hej Eksperter

Hvis man har en backend hvor man skriver/overskriver en xml fil, i dette tilfælde menu.xml.

Og man har en hjemmeside med en menu som loader menu.xml.

Hvis dette sker på samme tid kan windowsserveren finde ud af at håndtere dette eller?

Mvh Jensen2005
Avatar billede kalp Novice
30. august 2007 - 20:21 #1
Tror ikke det er et problem hvis du benytter
XmlDocument til at læse den ind og gemme den igen.
Avatar billede arne_v Ekspert
30. august 2007 - 20:26 #2
Du kunne faa problemer (writer kan ikke faa lov til at slette dem gamle fil, reader
faar laest rigtigt).

Du boer synkronisere adgangen.

Overvej evt. at bruge database fremfor flad fil. Databaser har 40 aars erfaring i at
loese problemt.
Avatar billede jensen2005 Nybegynder
30. august 2007 - 21:07 #3
OK.. Nogen ide til hvordan man plejer at synkronisere adgangen.
Avatar billede arne_v Ekspert
31. august 2007 - 05:31 #4
Den simple måde for single system er at bruge lock på et objekt der er delt
mellem trådene.

For optimal performance skal du dog have en shared read & exclusice mekanisme.

Jeg kan godt finde noget kode til det.
Avatar billede jensen2005 Nybegynder
01. september 2007 - 16:11 #5
Tak.. Det kunne jeg godt tænke mig at se et eksempel på.. Har du et eksempel i asp.net c#...
Avatar billede arne_v Ekspert
02. september 2007 - 04:08 #6
For en del år siden lavede jeg denne her klasse:

public class MultiSemaphore
{
    public const int EXCLUSIVE = 1;
    public const int SHARED = 2;
    private int nouser;
    private int mode;

    public MultiSemaphore() {
        nouser = 0;
    }

    public void Get(int mode)
    {
        lock(this)
        {
            while ((this.mode == EXCLUSIVE || mode == EXCLUSIVE) && nouser > 0)
            {
                Monitor.Wait(this);
            }
            nouser++;
            this.mode = mode;
        }
    }

    public void Release()
    {
        lock(this)
        {
            nouser--;
            Monitor.PulseAll(this);
        }
    }
}
Avatar billede jensen2005 Nybegynder
02. september 2007 - 07:56 #7
Tak arne v...

Jeg har FORELØBIGT valgt en lidt "grimmere" løsning...

Jeg lavede først forsøg hvor jeg loopede den menuside som læser XML'en. Altså når siden var færdig med at indlæse kaldt den på sig selv igen. Så snart jeg begyndte at skrive til XML'en fra en anden side fik jeg fejl på den side som stod og loopede.

Den "grimme" løsning består af:

At global.asax ser sådan her ud:

protected void Application_Error(Object sender, EventArgs e)
{   
  HttpContext url= HttpContext.Current;
  string nyUrl = url.Request.Path.ToLower();
  Context.Server.ClearError();           
  Response.Redirect(nyUrl);
}

Men jeg Googlede også ord fra din kode og fandt frem til nogle gode eksempler som jeg lige må arbejde lidt:

http://activedeveloper.dk/weblogs/mrjs/archive/2006/02/27/2346.aspx

http://www.c-sharpcorner.com/UploadFile/mmehta/LoadingXmlInTreeView11172005011544AM/LoadingXmlInTreeView.aspx


Endnu en gang tak for hjælpen...

Kast et svar ind så du kan få dine point.

Mvh Jensen2005
Avatar billede jensen2005 Nybegynder
02. september 2007 - 10:31 #8
Den "grimme" løsning virker ikke helt...
Avatar billede arne_v Ekspert
02. september 2007 - 15:37 #9
Ideen i min MultiSemaphore er at den tillader enten flere som læser eller kun en som skriver.

Der er sikkert også mange andre måder at lave det på i .NET, men det var den kode
jeg lige kunne komme på dengang.

Hvis du gemmer en instans af den klasse i Application, så kan dine læse side bruge:
  sem.Get(MultiSemaphore.SHARED);
  ...
  sem.Release();
og din opdatering sside bruge:
  sem.Get(MultiSemaphore.EXCLUSIVE);
  ...
  sem.Release();

Og et svar.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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



IT-JOB