When implementing the ReportsController you need to provide an IReportResolver implementation, which is used in the Reporting REST Service ReportServiceConfiguration - ReportResolver property. This article elaborates on the Reporting REST Service's ReportResolver purpose, usage, built-in implementations and the option for adding a custom implementation.
The Reporting REST Service's ReportResolver handles reports on the server.
IReportResolver defines the behavior of an object which takes a string as an argument and resolves it to a valid server-side ReportSource object. The format of this string argument is a matter of imlpementation, which should contain rules for collaboration between the service clients and the report resolver on the server. For example, if the resolver implementation expects a string containing a path relative to the application root directory, then the client should send a string containing such path. If the resolver is built to resolve reports from a type name, then a type name should be provided from the service client. Other scenario might require a resolver implementation which expects a report id and pulls the XML report definition from a database storage by that report id, then returns it as an XmlReportSource.
The Reporting REST Service's resolver is used when resolving information for a report on the server, which includes:
Getting information about the report's ReportParameters collection;
Returning a valid server-side Report Source;
Applying client-side parameters' values;
Exporting the report in a selected format;
Navigation to other report that is considered as a request for a new report.
When working with other types of report sources for which there is no built-in report resolver implementation, use a Custom Report Resolver implementation. For example, when using Drillthrough Report Action with XmlReportSource the action will not work unless a custom report resolver which can handle XmlReportSource has been implemented.
Implementing the IReportResolver interface allows you to include custom logic for creating, modifying, or accessing existing reports on the server, and to use any of the available report sources. An example implementation is available in How To Implement a Custom Report Resolver.
The IReportResolverResolve(String) method will be called each time when the Reporting engine needs the report source. This can happen serveral times until the report document is completely rendered. It is important that when the method is invoked multiple times it returns exactly the same report source for a given value of the passed string argument.