processing concurrrent requests from same user
Hi , Here is a question regarding request processing queue in Sitefinity.
I have two pages in my sitefinity website. Let's call it
SlowPage and FastPage
SlowPage has a widget in it which does a lot of complicated
data processing so it takes 20 seconds to run.
So when this page is requested it will take more than 20 seconds for the
page to load in the browser
FastPage is a normal page having only some text content in
it, so it loads very quickly.
A user makes a request to SlowPage and waits for the page to
load. Meanwhile he clicks on a link to navigate to the FastPage . The result
here is that the user won't be navigated to the FastPage until the server
completes the processing of the Slowpage.
It appears to me that the requests from the same user are going in
a queue and are processed only one after another. So the server will process the request for FastPage only after it finishes processing the previous request.
I have done some googling and found that it is a known
problem in asp.net MVC . MVC seems to be
process the requests from the same session sequentially as it needs to lock
the session while the page being processed. There is a workaround for this problem in ASP.Net MVC . The workaround is to set the SessionState to ReadOnly. It is
explained here
johnculviner.com/.../
I have tried to apply the same workaround in my sitefinity
website but it doesn’t seem to be working. I mean, even after setting the
SessionSate to readonly on all my controllers the requests are still processed only one
after another.
Does any know knows how to fix this? what I would like to achieve is, when the
SlowPage is being loaded in the browser, if the user decides to navigate to the Fastpage he should be taken to that page immediately without having to wait for
the server to complete the processing of the Slowpage.
Thanks
Suneeth
I've solved this issue. You have to:
1. Use Classic MVC mode: docs.sitefinity.com/for-developers-classic-mvc-mode
2. Manually write your route as in asp.net MVC. Don't use @Url.Action because sitefinity will generate different route.
3. Mark your controller with SessionState to ReadOnly. You still can read/write session in your controller as normal.
Now you app can handle concurrent request for same user.