Highlighted
Absent Member.
Absent Member.
1555 views

Flat Files in Codebehind

Jump to solution

I'm trying to read and right from flat files in codebehind in a web app project. It works the first time through. Subsequent executions create the error message below until the default app pool is recycled in IIS.

I've heard from other users that maybe flat files can't be used in codebehind. Is this true? Do I need to call a separate COBOL program to use a flat file? I would like to avoid making a call every time I want to access a file, because each call requires several lines of code to use a rununit to handle multiple users accessing the webpage simultaneously.

Here's the code causing the issue:

       class-id WebStressTest.LOGON is partial

                inherits type System.Web.UI.Page public.

         

       ENVIRONMENT DIVISION.

       CONFIGURATION SECTION.

       repository.

           CLASS MF-EX AS  "MicroFocus.COBOL.COBOLException"

           class Sql-Connection as "System.Data.SqlClient.SqlConnection"

           class Sql-Command as "System.Data.SqlClient.SqlCommand"

           class Sql-Exception as "System.Data.SqlClient.SqlException"

           class Sql-Reader as "System.Data.SqlClient.SqlDataReader"

           class cls-exception as "System.Exception"

           class clsHttpContext as "System.Web.HttpContext".

                

       INPUT-OUTPUT SECTION.

       FILE-CONTROL. 

           SELECT MSGQUE-FILE ASSIGN MSGQUE-FILE-NAME

                  ORGANIZATION IS SEQUENTIAL                                  

                  ACCESS MODE IS SEQUENTIAL                                    

                  FILE STATUS IS FILESTAT.

           SELECT PASSPARMS-FILE ASSIGN PASSPARMS-FILE-NAME

                  ORGANIZATION IS SEQUENTIAL                                  

                  ACCESS MODE IS SEQUENTIAL                                    

                  FILE STATUS IS FILESTAT.      

       DATA DIVISION.

       FILE SECTION.

       FD  MSGQUE-FILE.

       01  MSGQUE-RECORD.

           02  MSG-NAME PIC X(200).

           02  MSG-TEXT PIC X(9000).

       FD  PASSPARMS-FILE.

       01  PASSPARMS-RECORD PIC X(25000).

           

       working-storage section.

Error message:

Server Error in '/WebStressTest' Application.


Unable to execute static method or constructor when multiple run-units are present

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: MicroFocus.COBOL.COBOLRuntimeException: Unable to execute static method or constructor when multiple run-units are present

Source Error:

[No relevant source lines]


Source File: C:\SOURCE\ProjectPlanCode\Test\WebStressTest\WebStressTest\LOGON.aspx.cbl    Line: 0

Stack Trace:

[COBOLRuntimeException: Unable to execute static method or constructor when multiple run-units are present]
   MicroFocus.COBOL.Runtime.Common.RunUnit.GetCurrentRunUnit(IObjectControl pgInstance) +331
   MicroFocus.COBOL.Program.Reference.GetPointer32(Byte[] addrBytes, Int32 addrIndex, Int32 ptrType, IObjectControl pgInstance) +34
   WebStressTest.LOGON._MF_INITOBJ0() in C:\SOURCE\ProjectPlanCode\Test\WebStressTest\WebStressTest\LOGON.aspx.cbl:0
   WebStressTest.LOGON..ctor() in C:\SOURCE\ProjectPlanCode\Test\WebStressTest\WebStressTest\LOGON.aspx.designer.cbl:0
   ASP.logon_aspx..ctor() +37
   __ASP.FastObjectFactory_app_web_logon_aspx_cdcab7d2_wfzsb56h.Create_ASP_logon_aspx() +47
   System.Web.Compilation.BuildResultCompiledType.CreateInstance() +32
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +109
   System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +31
   System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) +37
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +334
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

 


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.

0 Likes
1 Solution

Accepted Solutions
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Flat Files in Codebehind

Jump to solution

The problem described above has been fixed in Visual COBOL 2.2 update 2 hotfix 6 which should be available for download later this week.

Thanks.

View solution in original post

0 Likes
2 Replies
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Flat Files in Codebehind

Jump to solution

There does appear to be a problem with handling COBOL files within a web application when rununits are in effect.

I wrote a demo program here that defines files within the web aspx.cbl program and it works fine even when called multiple times. As soon as I create a new rununit and even after calling its StopRun method, I see the error that you are experiencing on the second call.

Even if I move the file handling to a separate class and invoke it from the web page I run into an exception if rununits are being used.

Please create a support incident with Customer Care and reference my name in the description so that it will be routed to me.

Thanks.

0 Likes
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Flat Files in Codebehind

Jump to solution

The problem described above has been fixed in Visual COBOL 2.2 update 2 hotfix 6 which should be available for download later this week.

Thanks.

View solution in original post

0 Likes
The opinions expressed above are the personal opinions of the authors, not of Micro Focus. By using this site, you accept the Terms of Use and Rules of Participation. Certain versions of content ("Material") accessible here may contain branding from Hewlett-Packard Company (now HP Inc.) and Hewlett Packard Enterprise Company. As of September 1, 2017, the Material is now offered by Micro Focus, a separately owned and operated company. Any reference to the HP and Hewlett Packard Enterprise/HPE marks is historical in nature, and the HP and Hewlett Packard Enterprise/HPE marks are the property of their respective owners.