26. juli 2004 - 15:12Der er
19 kommentarer og 1 løsning
Application_Start uden brugerindblanding
Første gang jeg gør noget i min ASP.NET-applikation, efter jeg har kompileret, bliver Application_Start kørt.
Jeg kunne godt tænke mig at Application_Start blev kørt med det samme IIS'en startede eller programmet blev rekompileret. Altså uden indblanding fra brugeren. Det skal være en webapplikation. (Jeg kan ikke lægge et eller andet i "startup"-folderen på serveren)
Application_start køres når applikationen starter... Jeg kan ikke rigtig se hvordan det skulle være muligt at snable på om IIS-en starter fra en applikation der kun kan startes af IIS-en..... Det er sådan lidt hønen og ægget agtigt :o)
Hvorfor vil du gerne have kørt application_start når IIS-en starter... Det virker som et lidt specielt behov.
Det er fordi min ASP.NET applikation består af en tråd der skal køres engang imellem. Men den tråd går aldrig i gang, hvis man ikke har været inde på en aspx og klikke på et eller andet. Jeg starter tråden i Application_Start.
Jeg har stadig lidt svært ved at se, at det skulle være nødvendigt at eksekvere kode fra en web-applikation, hvis der ikke er nogen der bruger den - jeg er nok lidt tung i det :o)
Hvis du bruger visual studio er der en projekttype der hedder windows-service... Den sætter selv et skelet op til dig, hvor du sådan set bare kan udfylde hullerne :o) - det er helt ukompliceret. At få lavet en installer til den af visual studsio er lige så nemt.
hehe... jeg har lidt samme problem/behov. Jeg har en tråd der cacher alle mine data fra databasen som startes i Application_Start. Det tager omkring 1-2 minutter at køre tråden, hvilket gør, at den første bruger der besøger hjemmesiden vil opleve den som noget langsom :( Havde været smartere at få startet den tråd så snart at IIS var oppe at køre, eller lign. Problemet opstår jo også når at IIS recycler min Worker-process, så forsvinder cachen og skal genopbygges.
Har dog kigget lidt på noget serialization og Application_End-eventet, men man er vel doven ;)
Det mest lokkende jeg har hørt indtil videre, er at lave det til en Windows service, men så mangler jeg bare en måde at tilgå den Windows service fra min webapplikation som ligger på samme server.
// Display the list of device driver services. Console.WriteLine("Device driver services on the local computer:");
foreach (ServiceController scTemp in scDevices) { // Display the status and the service name, for example, // [Running] PCI Bus Driver // Type = KernelDriver
Console.WriteLine(" [{0}] {1}", scTemp.Status, scTemp.DisplayName); Console.WriteLine(" Type = {0}", scTemp.ServiceType);
// Update counters using the service type bit flags. if ((scTemp.ServiceType & ServiceType.Adapter) != 0) { numAdapter++; } if ((scTemp.ServiceType & ServiceType.FileSystemDriver) != 0) { numFileSystem++; } if ((scTemp.ServiceType & ServiceType.KernelDriver) != 0) { numKernel++; } if ((scTemp.ServiceType & ServiceType.RecognizerDriver) != 0) { numRecognizer++; }
Den henter en liste over alle device driver services, men det er måske egentlig et latterligt eksempel.
Du kan på en serveiccontroller angive et maskinnavn, og et servicenavn, og det er jo så snildt når du kender servicen i forvejen (det skulle så være den du selv har lavet).
Der er så en masse standardmetoder på en servicecontroller... start/stop og den slags.
Tak. Jeg har læst lidt mere om det også selv. Det må være den bedste løsning på problemet. (det kan ENDDA! bruges til cyberfessors problem, det er dog knap så oplagt)
Eftersom du hjalp og kom med det rigtige svar, synes jeg det ville være en kjende uhøfligt at afvise det ...
Synes godt om
Ny brugerNybegynder
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.