Cut from the notes of support call I had with MS.
-------------------------------------------------------------
Sessionstate "serializes" the requests...
When you have UpdatePanels and simulatuosly use direct async callbacks on the client, these callbacks get serlized.
That is also the asnyc callbacks that may access SessionState are serliazed.
The workaround is to set the "EnableSessionState" property to "False" for the pages that need to both call pagemethods and implement UpdatePanels. But there is a tradeoffs, in that as soon as different access SessionState, serialization takes place:
"... When sessions are enabled ( by default), each request would lock onto the session state, hence only one request with the same session_id is processed at a time.
In the sample, session is enabled but not used. Hence session_id is not generated, and there is no contention for session state in subsequent calls. However when global.asax is added , Session_Start handler is defined. This has a sideeffect of session_id being added to the response, and corresponding state object being created ( the purpose of Session_start event is to let application initialize the session state.) which would cause only request per user to be processed at a time.
Now the sample makes async pagemethod calls while waiting for a partial postback ( async postback from update panel) to finish. When global.asax is defined all the pagemethods calls would be blocked on session state. The lock on session_state would be held by the partial postback request ( which sleeps for some time). Hence none of pagemethod calls are processed till the partial postback is completed. This is why progress bar never appears, as by the time progress value is returned back, the partial postback is already completed.
The work around for this is to put EnableSessionState=”Off” or EnableSessionState=”Readonly” in the Page directive. If only one of the page codebehind needs write to session, one could move the pagemethod to a seperate webservice. Unfortunately if both Page codebehind as well as page method code need to write to session state, only one request can be processed at a time...."