Hej, Starta en extra tråd. Hej, Användaren behöver inte ha någon kontroll över om det är klart. Det som åligger användaren är att tanka upp filerna samt att sätta igång processen. Fördelen med en service är att den ligger i sitt eget process space, dvs skilt från IISn och ASP.NET applikationen. Nackdelen är att de är lite krångligare att få till och du måste installera den på servern. > Personligen hade jag nog föredragit en service, men inte av prestanda skäl utan mest för att jag isf ville skilja på funktionerna. Huvudtrådar får alltid exekvera klart innan appdomainen laddas ur vid recycling. Nya requests kommer in i en ny appdomain iaf, så det är ingen fara. > Huvudtrådar får alltid exekvera klart innan appdomainen laddas ur vid recycling. Nya requests kommer in i en ny appdomain iaf, så det är ingen fara. Du skulle väl kunna skriva en liten applikation som utför detta åt dig som webben drar igång åt dig.Ideer till projektet
jag har ett stor projekt som är på väg att avslutas. Dock har vi en del kvar som är följande:
- En användare skall ladda upp en packad fil med XML-filer
- XML-filerna skall packas upp
- En process skall sättas igång här UTAN att användaren som laddade upp det skall behöva vänta på det, det rör som om import till en databas. D.v.s. vill jag sätta igång en server process.
Min fråga är:
- När då användaren har laddat upp informationen så vill jag sätta igång en process. Hur löser jag det?
Som jag har det idag så påbörjas en process i samband med att uppladdning sker och därför måste användaren låta webbläsarfönstret vara uppe. Och det vill inte jag. Hur initierar jag denna interna process?
MVH
RobertSv: Ideer till projektet
Skall användaren få meddelande om att det är klart?Sv: Ideer till projektet
Man skulle kunna spara filen i en katalog med ett lämpligt filnamn och sedan ha en windows service som regelbundet tittar efter nya filer i den katalogen.
MVH
HerbjörnSv:Ideer till projektet
Ni nämner starta ny tråd eller ha en service som kikar regelbundet.
Prestandamässigt, vad är bäst? Jag får intrycket av att det är onödigt att ha en service som kikar
när vi ändå vet att vid ett specifikt tillfälle har kommit upp en fil.
Hur går jag vidare rent tekniskt med detta, hur startar jag en ny tråd och hur gör jag den oberoende? Jag är ingen monsterprogrammerare utan
har goda kunskapar inom .Net men fokus på ASP.Net och minimalt med windows.Sv: Ideer till projektet
Om man väljer en service så kan man använda sig av FileNotification klassen för att få ett event triggrat när en ny fil laddats upp, på det sättet behöver vi alltså inte "kika" efter nya filer i foldern.
Personligen hade jag nog föredragit en service, men inte av prestanda skäl utan mest för att jag isf ville skilja på funktionerna.
Att starta en ny tråd är relativt enkelt:
Thread t = new Thread(new ThreadStart(methodToRun))
där methodToRun är entry point där tråden skall börja exekvera kod. Det går att göra direkt i en webb applikation.
Viktigt är dock att man inte skapar hur mycket nya trådar som helst. Varje tråd du skapar ger ett visst overhead för hela servern. Så om det är ett scenario med mycket filer och massa uppladdningar, då hade jag nog satsat på tjänsten, eftersom den då kan beta av filerna efter hand på en eller ett fåtal trådar istället för en vid varje uppladdning.
Sv:Ideer till projektet
Jag skulle nog snarare lägga det i en egen tjänst då risken att man råkar ut för att asp.net startas om är mindre (eller snarare, mindre risk att det avbryts av någon anledning.) Och eftersom att man inte vet om det gick eller inte så känns det intressant att kunna lite på att asp.net inte råkade trigga någon recycle-regel mitt under arbetet
> Viktigt är dock att man inte skapar hur mycket nya trådar som helst. Varje tråd du skapar ger ett visst overhead för hela servern. Så om det är ett scenario med mycket filer och massa uppladdningar, då hade jag nog satsat på tjänsten, eftersom den då kan beta av filerna efter hand på en eller ett fåtal trådar istället för en vid varje uppladdning.
Det är en ganska smal sak att annars skapa en enkel "threadpool"-liknande sak för bara det här, eller ha någon kö eller något som en enda tråd läser ifrån.Sv: Ideer till projektet
Smal sak att skriva en thread pool? Ja tjena.Sv:Ideer till projektet
Ah... Då är det ju lugnt ;) (Fast å andra sidan kan ju skiten hänga sig å den stängs av helt abrupt pga. det, ingen större risk dock...)
> Smal sak att skriva en thread pool? Ja tjena.
Jag skrev "threadpool"-liknande sak; inte en riktig threadpool, bara en liten sak som håller koll på ett fåtal trådar och ifall det finns någon sådan här arbetsuppgift så körs den.Sv: Ideer till projektet
Då får det ju exekvera i bakgrunden och användaren märker ingenting
System.Diagnostics.Process.Start(Program att exekvera, Parametrar in till programmet);