Exception thrown by the ReportingService webservice

Dec 14 2004 2:20 PM
Hi, Hopefully, this is the correct forum to post this problem. It's about web services, but it's also about Reporting Services. I'm trying to render a Reporting Services report using .NET. In order to do this, I first publish the report's RDL file to the Reporting Services running on localhost, and then call the Render()-method of the ReportingService.cs instance. This works if the database which the report is evaluating contains little data. If it contains large amounts of data, it gives me an a WebException. It's not clear what the problem is: I used to get a timeout exception, but I changed the timeout. The new Exception I'm getting is less clear about what exactly doesn't work. It simply says "Die zugrundeliegende Verbindung wurde geschlossen: Beim Empfangen ist ein unbekannter Fehler aufgetreten..". I assume this translates to "The underlying connection was closed: An unexpected error occurred on a receive." The ReportingService class itself inherits from SoapHttpClientProtocol. The Exception occurs inside this class, namely when the instance tries to call this.Invoke(...) Here's Microsofts documentation for the ReportingService class: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/RSPROG/htm/rsp_ref_soapapi_service_ak_1xfd.asp Basically, it boils down to this: 1) I'm wondering if there's a way to render an RDL file without having to publish it to the web service and then render it? 2) If not, what could I try to fix the problem? As I said, it only occurs with large amounts of data, i.e. when it takes ReportingService a long time to render the report, so I assume it's some kind of timeout or "out of memory" issue. Here's the exception that's being thrown: An unhandled exception of type 'System.Net.WebException' occurred in system.web.services.dll Additional information: Die zugrundeliegende Verbindung wurde geschlossen: Beim Empfangen ist ein unbekannter Fehler aufgetreten.. And here's my code which causes the Exception to be thrown (the line containing the method call "results = reporting_service.Render(...) throws the exception): using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; using System.IO; using System.Web.Services.Protocols; namespace DBInvestigator { public class ReportRenderer { private ThreadWindow threadwindow; private Coordinator my_coordinator; private string host,login,password,database,format; private bool writereport; private string rdlfilename,reportname; public ReportRenderer(ThreadWindow threadwindow, Coordinator my_coordinator) { this.threadwindow = threadwindow; this.my_coordinator = my_coordinator; } public void SetParameters(string host,string login,string password,string database,string format,bool writereport, string rdlfilename, string reportname) { this.host = host; this.login = login; this.password = password; this.database = database; this.writereport = writereport; this.rdlfilename = rdlfilename; this.reportname = reportname; this.format = format; } public void WriteReport() { // create an instance of ReportingService ReportingService reporting_service = new ReportingService(); reporting_service.Timeout = int.MaxValue; reporting_service.Credentials = System.Net.CredentialCache.DefaultCredentials; // read the rdl file Byte[] definition = null; try { FileStream stream = File.OpenRead(this.rdlfilename); definition = new Byte[stream.Length]; stream.Read(definition,0,(int)stream.Length); stream.Close(); } catch (IOException ioexc) { ErrorReporter.Exception(this,ioexc); } // publish the rdl file reporting_service.CreateReport( "Report1", "/TempReports", true, definition, null); // render the published report ReportParameter[] parameters = reporting_service.GetReportParameters( "/TempReports/Report1", null,false,null,null); string encoding; string mimetype; ParameterValue[] history_params = null; string[] stream_ids = null; Warning[] warnings2 = null; DataSourceCredentials[] credentials = new DataSourceCredentials[1]; credentials[0] = new DataSourceCredentials(); credentials[0].Password = this.password; credentials[0].UserName = this.login; credentials[0].DataSourceName = this.database; Byte[] results; // the next line throws the exception results = reporting_service.Render( "/TempReports/Report1", this.format, null, null, null, credentials, null, out encoding, out mimetype, out history_params, out warnings2, out stream_ids); // write the rendered report to a file FileStream stream2 = File.OpenWrite(this.reportname); stream2.Write(results, 0, results.Length); stream2.Close(); } } }

Answers (2)