webForumDet fria alternativet

application.lock

5 svar · 231 visningar · startad av cyprys

cyprysMedlem sedan dec. 20003 563 inlägg
#1

Finns det någon speciell risk med att lägga application.lock fel?
Har nämligen hänt att en UPDATE har förstört en post och skapat ett allvarligt fel som stängt ner hela servern. När man valde att visa denna post på sidan så började ASP.NET att tugga samt ta upp 100% av processorn. Hittar verkligen inte felet. Funderar på om det kan blivit nån krock av att applikationen inte är låst på rätt sätt.

// Såhär har jag nu
Dim objcmd As new OleDbCommand(sqlcmd, conn)
			conn.open()
			application.lock
				objcmd.executeNonQuery()
			application.unlock
			conn.close()

// Är det annorlunda att ha såhär?
Dim objcmd As new OleDbCommand(sqlcmd, conn)
			application.lock
			conn.open()
				objcmd.executeNonQuery()
			conn.close()
			application.unlock
GladhMedlem sedan maj 20012 812 inlägg
#2

Du säger inte vilken databas du har, men alla nästan alla databaser har en egen låsning av post/rad/tabell när du gör en UPDATE/INSERT i databasen, så 2 processer skall inte samtidigt kunna ändra i en och samma post.

Sedan förstår jag inte varför du har application.lock runt det du har. Application.lock låser endast Application objectet och det använder du inte i din kod, så den låsning är helt meningslös.

- M

cyprysMedlem sedan dec. 20003 563 inlägg
#3

Hmm. Ok. Har jag missuppfattat hela grejen?
Stänger inte den ner åtkomst på applicationen medans den är låst?

Jag använder access just nu för detta. Men det konstiga är ändå felet som uppkommer vid uppdatering. Det uppkommer dessutom inte ofta. 3 ggr har det hänt på ca 1000 uppdateringar. :/

/r Att jag satt application.lock beror iofs på att jag försöker hitta och eliminera problemet som beskrivet ovan. Hade inte det innan.
Felsökning är alltid kul.

GladhMedlem sedan maj 20012 812 inlägg
#4

"Stänger inte den ner åtkomst på applicationen medans den är låst?"

I ASP och ASP.NET finns ett objekt som heter Application, det objektet är (förenklat) en stor Array där du kan lagra information.

Eftersom detta objekt är tillgängligt för alla besökare på din hemsida (jmf Session som är unikt per besökare) så betyder det att varje besökare kan ändra och läsa från detta objekt. Här finns alltså en risk att flera besökare samtidigt kan ändra i en post.

Då har man application.lock som låser objektet så endast en besökare åtgången kan ändra i posten.

Så det har inget med att kod mellan lock och unlock är säkrat på någotvis utan endast att objektet application är säkrat.

Om du får fel vid din UPDATE så har du problem med din databas/drivrutin. Om du inte använder OLEDB så gör det, den är bättre än ODBC. Annars har jag ingen ide om vad som kan vara fel. :(

- M

renholmMedlem sedan apr. 20012 266 inlägg
#5

cyprys skrev:

Jag använder access just nu för detta. Men det konstiga är ändå felet som uppkommer vid uppdatering. Det uppkommer dessutom inte ofta. 3 ggr har det hänt på ca 1000 uppdateringar. :/

Något felmeddelande?

cyprysMedlem sedan dec. 20003 563 inlägg
#6

Nope. Det är det som är problemet. Inget meddelande alls.
Till en början så kunde jag inte ens återskapa problemet lokalt.
När jag tillslut lyckades skapa samma låsning på den lokala datorn blev jag överlycklig. :) (aldrig blivit så glad över att få ett fel.)

Låsningen som inträffar är att ASPNET_wp tar 100% av processorkraften i en stund för att ett meddelande sen ska komma upp på webbsidan efter ett tag.

The web application you are attempting to access on this web server is
currently unavailable. Please hit the "Refresh" button in your web
browser to retry your request.

Administrator Note: An error message detailing the cause of this
specific
request failure can be found in the system event log of the web server.
Please review this log entry to discover what caused this error to occur.

Det funkar inte även efter en komprimering/reparering av mdb-filen.

Nu när jag kikar i mdb-filen så hittade jag nått mysko.
En tabell som heter "MSysCompactError" och innehåller en rad.
ErrorCode | ErrorDescription | ErrorRecid | ErrorTable
-1611 | Det gå inte att hitta fältet 'Description'. | "tomt här" | MSysObjects

Det som är konstigt är att posten kan visa några kolumner på en sida. När man sedan vill se hela posten samt köra en update på antal hits så går den aldrig igenom. antal_hits står alltid på 0. (Det var så jag upptäckte att felet låg på posten.)

Någon som känner igen detta fel?
Tabellen tillkom efter att jag försökte köra sidan.

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)