asp.net Timeout

Tags:    asp.net c-sharp iis

Jeg har nogle udfordringer med en asp.net side, hvor back-end koden er kompleks og den skal igennem meget data. Det tager 5-15 minutter for koden at blive færdig. Det kan ikke afvises at koden kan optimeres kraftigt, men det er ikke mit spørgsmål :-)

Fra jeg klikker på aspx siden til C# koden er færdig, går der så lang tid at siden bare hænger og har mistet forbindelsen til serveren hvor den har lavet post-back til. aspx siden viser et statusfelt som opdateres når back-end koden er afsluttet, men den opdateres først ved at jeg manuelt reloader aspx siden.

Mit spørgsmål er nu. Er det muligt i IIS / web.config, at definere hvor lang tid en aspx side skal vente efter postback, så problemet ikke opstår?



*tilføjelse*

Jeg har forsøgt med Server.ScriptTimeout = int.maxvalue; i code-behind men det fungerede ikke. Jeg har så opdaget at hvis debug=true er sat i web.config, så vil ScriptTimeout altid have værdien 30000000. Så jeg prøver lige igen med debug=false og skriver resultater herunder.

*tilføjelse*




Indlæg senest redigeret d. 15.10.2014 14:35 af Bruger #9814
7 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 23 karma
Sorter efter stemmer Sorter efter dato
Jeg ved ikke, om du evt. kan risikere, at en browser vil lukke forbindelsen inden serveren bliver færdig?

En anden tilgang til det, kunne være at bruge SignalR, hvor du sender en start kommando, der starter opgaven asynkront. Løbende kan du sende updates til klienten om fremgang og til sidst fortælle den at den er færdig.



Jeg tilslutter mig Nickys forslag om en asynkron handling. Når du starter jobbet bør du starte en tråd, eller et callback som kan udføre det 5-15mins. arbejde. Så kan man i mellemtiden arbejde videre på sitet/systemet, og f.eks. åbne op for muligheder som at annullere jobbet mm.

Er selv glad for denne artikel: http://msdn.microsoft.com/en-us/library/hh191443.aspx





Følgende i web.config burde gøre udslaget for en enkelt side.

Fold kodeboks ind/udKode 


Konfigurations stumpen skal ligge inde i elementet der hedder Configuration. Jeg plejer at ligge locations lige før slut tag'et for configuration.



Det virker på følgende måde har jeg nu konstateret.

Hvis man har back-end kode som tager lang tid at udføre kan man sætte timeout lige før koden udføres med:

Fold kodeboks ind/udCSharp kode 


Men det kræver at debug = false er sat i web.config hvis man ønsker at overstyre timeout på den måde.

Men så fungerer det :-)



Hej Brian,

Du kan prøve at ændre execution timeout i din web.config. Tag et kig her: http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.85).aspx

Jeg vil dog anbefale, at du til slut resultat laver en location block i web.config der sætter execution timeout for den enkelte side i stedet for globalt.

Jeg har selv i nogen situationer været nød til at ændre dette for enkelte webservices, og der har det ikke været et problem.

Edit:
Det kunne godt tyde på det du har laver gør præcis det samme. Faldt over det her: http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.scripttimeout(v=vs.110).aspx



Indlæg senest redigeret d. 16.10.2014 17:47 af Bruger #6559


Jeg vil dog anbefale, at du til slut resultat laver en location block i web.config der sætter execution timeout for den enkelte side i stedet for globalt.


Den del var jeg ikke klar over. Så hvis jeg laver en override i web.config på siden, så kan jeg der lave en execution timeout i stedet for at ændre i source-koden som jeg skrev? Det vil jo være en god løsning, da det kun er én enkelt side som har udfordringen.





Helt enig i at en asynkron tilgang til jobbet er optimalt, men det er bare ikke en nem løsning til dette job som efterhånden er noget gammelt noget.. Men jeg vil forsøge :-)



t