COBOL CICS server being called from .NET client

We just started with ENTIREX products and I am assigned to a task to connect a client .NET application to a COBOL CICS server program in a Z-OS environment. Our RPC server runs in a windows box and I am having a hard time to figure out the mainframe path to get to the server. My questions are:

1- How to set up the mainframe/CICS for this connection? Do I need a stub (RPCSRVI) in the mainframe? How the CICS transaction is going to receive the data (COMMAREA)? - Please provide references to the manuals, if available, so we can read from the same source.

2- Does anyone have a COBOL CICS server example using RPC calls? The documentation is unclear and examples are poor to clarify…

Any help is very much appreciated. Thanks,

Sergio

I’m not overly clear on what your environment is: where are the services and where is the client? You indicate that your RPC server is on Windows, but COBOL CICS is on the mainframe, not Windows…

However, I do understand your confusion…there are so many things called the “rpc server” and “rpc client” that it is difficult to keep them straight when starting out…

Assuming you mean that your .Net application is trying to retrieve data/services from the mainframe COBOL CICS environment, you will need:

  • a .Net Client Wrapper
  • EntireX RPC Server in CICS

EntireX CICS RPC Server calls the COBOL routine via an EXEC CICS LINK, passing parameters in the COMMAREA.

Just to clarify: RPCSRVI is needed if you are doing RPC calls from your COBOL programs - that is, if the COBOL programs are the client of an RPC server. I am working with a customer now that is serving up Oracle/Unix data via a Java RPC Server running on a Windows 2003 box to mainframe Natural/Cobol/Assembler clients. For this, we generate the COBOL Services (RPCSRVI) and the COBOL wrapper (a stub that is called from the mainframe programs to pass the call on via EntireX Communicator to the Java RPC Server).

On my machine, documentation on EntireX RPC in CICS is under C:\Program Files\Software AG\EntireX\Docu\install\os390\rpc_cics.htm. This will explain how to configure the EntireX RPC Server for CICS on the mainframe (z/OS or OS/390). (From the doc main menu, look under “Components of EntireX” for “EntireX RPC Servers”). For information on server programs (COBOL called from the EntireX RPC Server for CICS), check under “Components of EntireX” for “EntireX Developer’ Kit”, then “EntireX in your Application” for COBOL - “EntireX RPC for COBOL”.

For the client piece, you want to read the .Net Wrapper information under C:\Program Files\Software AG\EntireX\Docu\devkit\rpc_dnet\overview.htm.

Douglas, thanks for the clarification. The truth is we have EntireX Broker runing in a Windows and I want acces a CICS RPC server in the mainframe. I worked with the systems support to have the CICS RPC server installed but we got stuck again. After starting the CICS transaction ERXM I press PF8 to start the server and nothing happens and when I press PF9 to ping the server I get “NET: Connection error”. We turned the trace log on and we got " Error code : 02150061". If I add the port number to the broker name, as ETB001:1971, then I get " Error code : 02150148". My Broker Runtime version is 7.1.1.60.
Any clue of what is missing?

Thanks a lot.
Sergio

Sounds like you do not have the TCP/IP support set up for CICS. You need to either install SMARTS for CICS (part of the EntireX package on the mainframe) or upgrade to EXX721, patch level 15, which has a new facility for using TCPIP/SSL from CICS.

Douglas,
After almost two months we still have the same issue: error message 02150061. I have problem log #588378 opened with Denver support but we are moving really slow in part because we were trying different things in attempt to get it to work but without any success so far. Here is the status: we have EntireX V711 patch level 60 in the mainframe and EntireX V721 patch level 18 in Windows 2003 Server machine. We have TCP/IP and SMARTS installed and working (for a different project) on the mainframe. When we launch ERXM transaction under CICS it cannot register the RPC server with EntireX broker on Windows. It keep getting the error code above with the message “Net:Connection error”. Below is the CICS log it creates when PF8 is depressed to start the server. I hope you can shed some light on this.

Thanks,

Sergio

ESRV 0000109> EntireX RPC Runtime 7.1.1.60
ESRV 0000109> (c) Copyright Software AG 1997-2004. All rights reserved.
ESRV 0000109> Compiled on Nov 4 2004 at 12:52:24
ESRV 0000109> 2005-10-28 11:14:10 RUNTIME is starting
ESRV 0000109> ( ERXInit (1. call)
ESRV 0000109> . Runtime version …: EntireX RPC Runtime 7.1.1.60
ESRV 0000109> . TraceDestination…: CSSL
ESRV 0000109> . TraceLevel …: 2048
ESRV 0000109> . MessageArea at …: 0x1a5dc328
ESRV 0000109> . SizeOfMessageArea.: 100
ESRV 0000109> . etb_APIVers …: 7
ESRV 0000109> . CodePage …:
ESRV 0000109> . Run options…: COBOL_TIME P_SIGNED N_SIGNED
ESRV 0000109> . Highest RPC version 2000
ESRV 0000109> . returns: 00000000
ESRV 0000109> ) ERXInit
ESRV > EntireX RPC server V7.1.1.60 parameters:
ESRV 0000109> EntireX RPC server V7.1.1.60 parameters:
ESRV > Broker Id (default)…ETB001
ESRV > Service (default)…RPC/TERM2000/CALLNAT
ESRV > MinWorker (free for new conversation) 1
ESRV > MaxWorker (max parallel active) … 10
ESRV > EndWorker (criteria when to stop) … I
ESRV > Timeout (in seconds for Broker) … 600
ESRV > Api used (for Broker) … 7
ESRV > Codepage (for data conversion) …
ESRV > Server is starting… Fri Oct 28 11:14:10 2005
ESRV 0000109> Max. Thread entries available … 41
ESRV 0000109> ( QueryBroker (2. call)
ESRV 0000109> . ( ERXRegister (1. call)
ESRV 0000109> . . Parm1: 7001000
ESRV 0000109> . . ( Register (1. call)
ESRV 0000109> . . . returns: 00000000
ESRV 0000109> . . ) Register
ESRV 0000109> . . returns: 00000000
ESRV 0000109> . ) ERXRegister
ESRV 0000109> . ( ERXLogon (1. call)
ESRV 0000109> . . UserId : ERXSRV1
ESRV 0000109> . . Password :
ESRV 0000109> . . BrokerId : ETB001
ESRV 0000109> . . 2005-10-28 11:14:10 ETBCB before calling ETB:
ESRV 0000109> . . Type, version : 1 7
ESRV 0000109> . . Function, option : 9 0
ESRV 0000109> . . L’Send Buffer : 0
ESRV 0000109> . . L’Receive Buffer : 0
ESRV 0000109> . . L’Return Data : 0
ESRV 0000109> . . L’Error Text : 256
ESRV 0000109> . . Target Broker : ETB001
ESRV 0000109> . . Logical UID : ERXSRV1
ESRV 0000109> . . Error code : 00000000
ESRV 0000109> . . 2005-10-28 11:14:10 Back from ETB, CB changes:
ESRV 0000109> . . Error code : 02150061
ESRV 0000109> . . Receive buffer not dumped because of Broker Error Code.
ESRV 0000109> . . returns: 02150061
ESRV 0000109> . ) ERXLogon
ESRV 0000109> . ( ERXGetLastError (1. call)
ESRV 0000109> . . returns: 00000000
ESRV 0000109> . . MsgId : 02150061
ESRV 0000109> . . MsgText : NET: Connection error.
ESRV 0000109> . ) ERXGetLastError
ESRV > 02150061 NET: Connection error.
ESRV > 10050014 ERXLogon() failed.
ESRV 0000109> . ( ERXUnregister (1. call)
ESRV 0000109> . . ( Unregister (1. call)
ESRV 0000109> . . . returns: 00000000
ESRV 0000109> . . ) Unregister
ESRV 0000109> . . returns: 00000000
ESRV 0000109> . ) ERXUnregister
ESRV 0000109> ) QueryBroker
ESRV 0000109> ( ERXRegister (2. call)
ESRV 0000109> . Parm1: 7001000
ESRV 0000109> . ( Register (2. call)
ESRV 0000109> . . returns: 00000000
ESRV 0000109> . ) Register
ESRV 0000109> . returns: 00000000
ESRV 0000109> ) ERXRegister
ESRV 0000109> ( ERXLogon (2. call)
ESRV 0000109> . UserId : ERXSRV1
ESRV 0000109> . Password :
ESRV 0000109> . BrokerId : ETB001
ESRV 0000109> . 2005-10-28 11:14:10 ETBCB before calling ETB:
ESRV 0000109> . Type, version : 1 7
ESRV 0000109> . Function, option : 9 0
ESRV 0000109> . L’Send Buffer : 0
ESRV 0000109> . L’Receive Buffer : 0
ESRV 0000109> . L’Return Data : 0
ESRV 0000109> . L’Error Text : 256
ESRV 0000109> . Target Broker : ETB001
ESRV 0000109> . Logical UID : ERXSRV1
ESRV 0000109> . Error code : 00000000
ESRV 0000109> . 2005-10-28 11:14:10 Back from ETB, CB changes:
ESRV 0000109> . Error code : 02150061
ESRV 0000109> . Receive buffer not dumped because of Broker Error Code.
ESRV 0000109> . returns: 02150061
ESRV 0000109> ) ERXLogon
ESRV 0000109> ( ERXLogoff (1. call)
ESRV 0000109> . 2005-10-28 11:14:10 ETBCB before calling ETB:
ESRV 0000109> . Type, version : 1 7
ESRV 0000109> . Function, option : 10 19
ESRV 0000109> . L’Send Buffer : 0
ESRV 0000109> . L’Receive Buffer : 0
ESRV 0000109> . L’Return Data : 0
ESRV 0000109> . L’Error Text : 256
ESRV 0000109> . Target Broker : ETB001
ESRV 0000109> . Logical UID : ERXSRV1
ESRV 0000109> . Error code : 00000000
ESRV 0000109> . 2005-10-28 11:14:10 Back from ETB, CB changes:
ESRV 0000109> . Error code : 02150061
ESRV 0000109> . Receive buffer not dumped because of Broker Error Code.
ESRV 0000109> . returns: 02150061
ESRV 0000109> ) ERXLogoff
ESRV 0000109> ( ERXUnregister (2. call)
ESRV 0000109> . ( Unregister (2. call)
ESRV 0000109> . . returns: 00000000
ESRV 0000109> . ) Unregister
ESRV 0000109> . returns: 00000000
ESRV 0000109> ) ERXUnregister
ESRV > Server Statistics:
ESRV > Conversations successful … 0
ESRV > Conversations aborted … 0
ESRV > Workers successful … 0
ESRV > Workers failed in starting … 0
ESRV > Workers failed in executing … 0
ESRV > Workers maximum parallel active … 0
ESRV > Server is stopping… Fri Oct 28 11:14:10 2005
ESRV 0000109> 2005-10-28 11:14:10 Server terminates, rc=8

I didn’t see this question in the log…

From TSO READY prompt, can you enter “ping etb001”? does the reply IP address (assuming it finds it) match the IP address of the Windows server that Broker is running on?

If the ping fails, can you enter “ping 10.1.1.1” where “10.1.1.1” is the IP address of the Windows server? If that works, but the above “ping etb001” doesn’t, then there is a DNS problem. You can test this by setting the Broker ID to 10.1.1.1:1971 in ERXM.

Sergio / Douglas,

the mentioned error “NET: Connection error” indicates that the RPC server is using the CICSETB stub.

With 7.1.1 only Adabas SVC / Entire Net-work communication is possible with this stub. To use TCP/IP and SMARTS you need to use ERXMAIN$ and RPCSRV$ instead of ERXMAIN and RPCSRV.

With 7.2.1 SMARTS is no longer supported and has been replaced by the Relay Manager (with 7.2.1.15).

Douglas,
It make sense what you are saying about the DNS issue and I just asked the network folks to create a DNS entry for ETB001 since it pings okay with IP address but it fails when I tried ETB001, but I don’t think this is where the problem is. See the log file attached and you will see that EntireX Broker answers the enquiry about the VERSION, which tells me the communication is effective but it fails when a SEND request is attempted. Notice that the Windows version it returns in the buffer is 7.2.1.18 and I was told by SAG this version difference would not be a problem. Sorry if this issue is getting to long but I cannot give enough details as a log would provide. Thanks for your time and help.

Sergio


Rolf,

This is what we have done to get the right stub installed and unless there is something else we missed I don’t know what to tell you…

  1. In the EntireX RPC Load Library rename the modules RPCSRV and ERXMAINT to names of your choice.
    2.In the Entire X RPC Load Library rename the modules RPCSRV$, and ERXMAIN$ to RPCSRV and ERXMAINT.
  2. Start the RPC Server with ERXM transaction

Is there any other module or library that we could have missed during the installation of the server under CICS that would still pointing to the wrong stub? Thanks for your time and support.

Sergio :?
RPC Broker Call.log (49.5 KB)

There are two function calls for versions: VERSION and KERNELVERSION. VERSION checks only the version of the stub; KERNELVERSION checks the version of the Broker being called. That is, VERSION does not do any network calls - it only checks the version of the local stub.

The top part of the log seems to be chopped off: is this the log from the Windows client or the CICS RPC Server (ERXM)? I’m guessing that this is the log from the Windows client, not the CICS RPC Server?

Your log shows a return code of 00070007, indicating that the client is contacting a Broker, but the Broker says it does not have a server of the name RPC/TERM2000/CALLNAT registered.

Is the Broker at 10.1.220.61? What IP address are the Broker (Windows Server) and CICS RPC server (mainframe) at? This log shows that a Broker at 10.1.220.61:1971 is found, but it does not have a server registered. This is different from the previous errors (0215 0061 and 0215 0148) on the server, which indicated that the Broker was not found.

If you look at the System Management Hub for 10.1.220.61:1971, do you see the RPC server registered with it?

Sergio,

do you have an Adabas DB with DBID=1 running on your host ? I assume you do have one because this explains the 02150061 error. The 61 is actual an response code from the Adabas kernel. So the stub sends the Broker call to an Adabas kernel (the DBID is the numerical value extracted from the brokerid ETB001). To avoid using the wrong communication method please specify “ETB001:1971:TCP” as the brokerid.

I also have the impression you have an inconsistent environment. The RPC server log from Oct 26 (which can be found in the SR) displays “EntireX RPC Runtime 7.2.1.1”. However, as I already mentioned EXX 7.2.1 does not support SMARTS any longer and there is no RPCSRV$ or ERXMAIN$ in the 721 datasets. If you want to use SMARTS you need a clean 7.1.1 only environment.

Since this is actually a support issue and a support request already exists I suggest to continue this topic via support.

Rolf,

I will continue this issue with support as you suggested I just thought I could use your knowledge in dealing with problems from all over the world to speed up a little the answers I am after. Thanks anyways.

Sergio