I'm using Powerbuilder 2019 R2 Beta and SnapDevelop.
I migrated a simple application to PB2019R2 and then built a Web API in SnapDevelop following the instructions in
I migrated a datawindow in the application and scaffolded a web api to trial out a datawindow update using the Snapdevelop datastore object.
The main controller code is basically
var result = _id_project_listservice.Update(dataStore);
return Ok(result);
I put a button on a window in the PB application to call the api. I used the existing application to retrieve and change details, then clicked the button to update the database with the datawindow changes using the API. Everything worked perfectly for insert, update and delete and setting up the Web API and scaffolding was very straightforward.
The only drawback was that the response seemed slow at around 2 seconds or more. I put in some code to check timings and the call to the RestClient to submit the request was taking over 2 seconds.
Running an update from Postman with data extracted using ExportJson to do the same update returned in under 0.1 seconds. The snapdevelop console also shows the request finished in under 0.1 seconds. I also checked out update timings in SQL Server Profiler and these were also under 0.1 seconds.
I noticed that sometimes the processing was a lot quicker and can now replicate it at will. If I do an RestClient Submit with no changed data, this takes 2 seconds or more. I then immediately send the submit again, the second one only takes 0.2 seconds. Repeating this consistently shows the same results.
This indicates that the response could potentially be 0.2 seconds - only question is where is the extra 1.8 or more seconds coming from? - any suggestions gratefully received - TIA. Jim
I've included the button code I used to send the update to the API.
//Send updated Datawindow details in dw format.
String ls_ResponseBody
Integer li_SendReturn
SETPOINTER (HourGlass!)
RestClient lrc
lrc = Create RestClient
lrc.SetRequestHeaders( "Content-Type:application/json;charset=UTF-8~r~nAccept-Encoding:gzip" )
//Uses the DataWindow JSON
//Server determines whether to update according to the data state
//DataWindow column name and type must match with that of server
dw_list.accepttext()
string ls_json
string ls_1start, ls_2export, ls_3submit, ls_4submitend, ls_msg
ls_1start = string (Today(), "yyyy-mm-dd hh:mm:ss.fffff")
ls_json = dw_list.ExportJson( true, true)
ls_2export = string (Today(), "yyyy-mm-dd hh:mm:ss.fffff")
ls_3submit = string (Today(), "yyyy-mm-dd hh:mm:ss.fffff")
li_SendReturn = lrc.submit ("http://localhost:5000/api/D_Project_List/Update",ls_Responsebody, dw_list,True, True)
//li_SendReturn = lrc.SendPostRequest("http://localhost:5000/api/D_Project_List/Update", ls_json, ls_Responsebody)
ls_4submitend = string (Today(), "yyyy-mm-dd hh:mm:ss.fffff")
ls_msg = 'Return code ' + STRING (li_sendreturn) + ' Response ' + ls_Responsebody
ls_msg += '. ~r~nSubmit started at ' + ls_3Submit
ls_msg += '. ~r~nSubmit ended at ' + ls_4submitend + '.'
MessageBox('Return ', ls_msg)
RETURN
I wonder if the web server is "going to sleep". So the first call has to wake it up when the subsequent calls are not having that overhead. You might want to check cache pools and timeouts on your web server. Just a thought....