I have recently tried to use Report Viewer Web Part in a SharePoint page. The reports have been used outside SharePoint for years. We are currently on SSRS 2008 R2 native mode and SharePoint 2007. After a while, when you go to the page with the web parts, you just get the error:
The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found. (rsExecutionNotFound)
And, in the SSRS log you get:
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: , An error occurred within the report server database. This may be due to a connection failure, timeout or low disk condition within the database.;
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Error in getting session data: Invalid or Expired Session: yoty4kmgk3hjr5uup1ng0a45
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: i INFO: LoadSnapshot: Item with session: yoty4kmgk3hjr5uup1ng0a45, reportPath: , userName: DOMAIN\USER not found in the database
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: , Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found.;
library!ReportServer_0-33!f84!10/28/2013-11:09:45:: i INFO: RenderForNewSession('/PATH/REPORT')
Now I know exactly what this is. We get this all the time. When you run a report, SSRS takes a temporary snapshot and associates it with your session, and then renders from the snapshot to the browser. If you allow the report to sit open in the browser long enough the session times out and the temporary snapshot is destroyed. If you come back and try to interact with the report you will get this error because the session is gone. When this happens in a browser you can simply go back to the report manager and re-run the report to get a new session and snapshot.
Right now my creative team is working on the SharePoint layout and design. They have been working with at least three different example pages, which each hosts the same two SSRS reports in an instance of a Report Viewer Web Part. The reports do render normally when you initially place them on the page. However, after SSRS expires the session, the web part will show the session not found error. Each page establishes a different session for the same report so there will be multiple sessions open and the report will continue to render on one page after it starts showing the error on another.
The message is absolutely correct, the session does not exist. Sessions are transient, with a timeout of 600 seconds. This is expected behavior. So why is the instance of the web part in the page still holding on to the dead session? If you navigate away from the page and then come back, or you refresh the page, why does the SharePoint Report Viewer Web Part not go execute the report and get a new execution id? Is the web part not intelligent enough to know what's going on? Is there some expectation of the instance lifetime that's not being met?
So the question is: How could we get the SSRS SharePoint Web Part to be well behaved? In the SharePoint context a user should be able to open a page and interact with the content on it, unaware of where the content comes from or how it gets there, the experience should be seamless and transparent. In this case the Web Part is caching the session on the SharePoint server [I guess] so once SSRS kills the session the view in SharePoint just renders an error and we have found no way to refresh it.
Is there a way to solve this?