Using EReportBuilderError
Hello,
Can someone provide an example on how to use EReportBuilderError to keep my
ReportBilder Server application from shutting down when an access violation
occurs?
Occasionaly, for some strange reason, my RB Server application will throw an
Access Violation due to a web request from a WebTier com object. After it
throws the error, the whole rb server will lock up, and will require a
restart.
In a previous message thread, it was mentioned that EReportBuilderError
could be used to catch these errors, report them to the client, and the
server could stay up. I don't know where to begin to implement this
safeguard. Any assistance would be great!
I am using RB Server 7.02 with Delphi 6 SR2 on Windows 2000 Server SP3, with
a SQL Server 2000 backend (using a Report Explorer structure including a
report items and report folders tables).
Thanks in advance,
Clinton
Can someone provide an example on how to use EReportBuilderError to keep my
ReportBilder Server application from shutting down when an access violation
occurs?
Occasionaly, for some strange reason, my RB Server application will throw an
Access Violation due to a web request from a WebTier com object. After it
throws the error, the whole rb server will lock up, and will require a
restart.
In a previous message thread, it was mentioned that EReportBuilderError
could be used to catch these errors, report them to the client, and the
server could stay up. I don't know where to begin to implement this
safeguard. Any assistance would be great!
I am using RB Server 7.02 with Delphi 6 SR2 on Windows 2000 Server SP3, with
a SQL Server 2000 backend (using a Report Explorer structure including a
report items and report folders tables).
Thanks in advance,
Clinton
This discussion has been closed.
Comments
Run the report server application under the Delphi debugger and determine
the cause of the exception. In the debugger options set break on exceptions
to true.
The ReportBuilder code uses EReportBuilderError (and its descendants) to
'raise' exceptions about error conditions that it encounters.
The RB Server handles EReportBuilderError exceptions as "non fatal" error
conditions. The server simply kills the offending session and thread.
Other exceptions that occur are consider to be fatal to the server
application.
You can write code to in your reports to raise EReportBuilderError
exceptions and to trapped other exceptions and re-raise them as
EReportBuilderError.
Here is an example taken from ppDBPipe.pas. The DBPipeline tries to open the
dataset to which it is connected. If an error occurs, the exception is
trapped and re-raised as EDataError. EDataError is a descendant of
EReportBuilderError.
if FOpenDataSource and (FDataLink.DataSet <> nil) then
try
FDataLink.DataSet.Open;
except on E: Exception do
raise EDataError.Create(E.Message);
end;
--
Nard Moseley
Digital Metaphors
http://www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
But I realized today that my problem is not with the ReportBuilder Server,
but it must be with my WebTier COM Server. Everything works fine, until the
same report gets a request by 2 or 3 users simultaneously. When this
happens, the COM Server seems to stop working and IIS must be restarted to
get it working again. I also receive an error when I try to request a
report after this happens: "Access Violation has occured in ntdll.dll"
The server remains up though, because I can access it via thin-client
application, and IIS remains working as well. I followed the directions for
setting up a COM Server for WebTier. What could be my problem?
I estimate that my application will have approximately 10+ users accessing a
report at any point in time simultaneously. So I'm really worried!
Any help is appreciated.
Thanks again,
Clinton
This problem occurs with any report: it will occur when two different
report requests are made, or the same report.
Have not had any other reports with this issue.
Check that you have IIS configured as described in the RBServer\Demos\Web
Tier\ASP\ReadMe.doc. The COM object should be loaded into memory once and
should remain loaded at all times. It should run in the "high isolated"
setting on IIS.
Any code that you write for the WebTier application must be thread safe. I
cannot determine whether you have custom code in your WebTier app, but if
you do try creating a simpler test app that contain no custom webtier code.
--
Nard Moseley
Digital Metaphors
http://www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
sorry it took me so long to reply. I never could get my COM component to
work properly after I implemented all of your suggestions. I converted the
COM to a ISAPI dll and not had any problems since.
Thanks,
Clinton