Consuming a Web Service from NETCOBOL
This article shows you how to consume a Web service from NetCOBOL.
Web Services has been one of the hot buzz word in the Technology for quite sometime. Web Services describes a standardized way of integrating Web-based applications using the XML, SOAP, WSDL and UDDI open standards over an Internet Protocol. Web Services allows different applications from different sources to communicate to each other irrespective of the operating system and the programming language. In short Web Services can be called as application services.
Knowing the efficiency of Web Services we will try to use a Web Service with client developed using NETCOBOL for .NET. The software needed can be downloaded here.
We'll try to view the image of the Employee whose employee id is given as a parameter to the Web Service. Lets take a look at the Web Service developed using VB.NET.
<WebMethod()> Public Function displayImage(ByVal empid As Integer) As Byte()
Dim mycn As New SqlConnection("server=localhost;uid=sa;password=;database=northwind")
Dim mycmd As New SqlCommand("select * from Employees where employeeid=" & empid, mycn)
Dim dr As SqlDataReader = mycmd.ExecuteReader
Dim imgbyte As Byte() = CType(dr("photo"), Byte())
The task of the Web Service is to take Integer as input parameter and return a Byte Array. Lets try to write a client for this Web Service.
Create a New COBOL Project and Template will be Windows Application. In the user interface drag and drop a Button and PictureBox Control. In the sample code here i'll hard code the value that needs to be passed to the Web Service.
The first task to be done is add the Web Reference for the Web Service in the COBOL Project. Secondly we'll add all the required classes in the REPOSITORY.
CLASS CLASS-WSCOBOL AS "cobcallWS.localhost1.WSread"
CLASS CLASS-BYTE AS "System.Byte"
CLASS CLASS-MEMORYSTREAM AS "System.IO.MemoryStream"
CLASS CLASS-BITMAP AS "System.Drawing.Bitmap"
Here WSread is the name of the class(i.e name of the WebService developed is WSread.asmx) which is added as a reference to Project cobcallWS.
In WORKING-STORAGE SECTION declare:
01 wsobj OBJECT REFERENCE CLASS-WSCOBOL.
01 imgbyte OBJECT REFERENCE CLASS-BYTE.
01 bmpobj OBJECT REFERENCE CLASS-BITMAP.
01 ms OBJECT REFERENCE CLASS-MEMORYSTREAM.
01 strFileName OBJECT REFERENCE CLASS-STRING.
In the click event of button write INVOKE CLASS-WSCOBOL "NEW" RETURNING wsobj.
INVOKE wsobj "displayImage" USING BY VALUE 2 RETURNING imgbyte.
INVOKE CLASS-MEMORYSTREAM "NEW" RETURNING ms.
INVOKE CLASS-BITMAP "NEW" USING BY VALUE imgByte 78 21548.
SET strFileName TO "c:\empimg.jpeg".
INVOKE bmpobj "Save" USING BY VALUE strFileName.
I have hardcoded value of offset to 78. We can also declare and assign in the the WORKING-STORAGE SECTION as follows: 01 offset PIC S9(4) COMP-5 VALUE 78.
To display the image in the pictureBox control we'll need to add the property image in the REPOSITORY . 01 PROP-IMAGE AS "Image".
In the click event of button SET PROP-IMAGE OF pictureBox1 TO bmpobj.
This is all that we need to build and run the code.