After thorough debugging I've managed to find the root of the problem. It is laid in this readonly field, which can be find declared in the CanvasIFrameBasePage:
Api _api =
The problem is that this field is going to be initialized as soon as runtime execution has begun, which in turn will happen somewhere in the beginning of the Global Asax life cycle events, but for sure, before ProcessRequest is called on the handler, that should serve the request. How is that breaking the area? Lets take a look at the IFrameCanvasSession object that is being created. In it's base, base (CanvasSession) class constructor the following method is executed:
Inside it, the following lines of code can be found:
inProfileTab = HttpContext.Current.Request[QueryParameters.InProfileTab] ==
sessionKeyFromRequest = inProfileTab ? HttpContext.Current.Request[QueryParameters.ProfileSessionKey] : HttpContext.Current.Request[QueryParameters.SessionKey];
Now, what happens here is that Context.Current.Request is being queried extremely early in the application life cycle (remember that the Api
field is readonly). This query forces the context to parse (upload) the whole request, effectively leaving RadProgressArea without context to update.
The only workaround I've found for that problem is to navigate to the CanvasIFrameBasePage code, remove the initialization from the Api field, and then initialize it inside the OnInit handled, like this:
// more code
Unfortunately I am not sure what side effects this might cause, therefore I don't recommend that you use that approach. As it turns out, the current implementation of the CanvasIFrameBasePage is incompatible with RadProgressArea.
I hope that this helps.
the Telerik team