1. Jim Nesbitt
  2. PowerBuilder Beta
  3. Wednesday, 26 February 2020 16:14 PM

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 

https://docs.appeon.com/appeon_online_help/dwconverter2019r2/CRUD_Operations_with_.NET_DataStore/index.html

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

 

 

 

 

References
  1. https://docs.appeon.com/appeon_online_help/dwconverter2019r2/CRUD_Operations_with_.NET_DataStore/index.html
Jim Nesbitt Accepted Answer Pending Moderation
  1. Wednesday, 26 February 2020 21:37 PM
  2. PowerBuilder Beta
  3. # 1
0
Votes
Undo

Hi Armeen

Thanks for the reply.  I started working on this at home to see if I could produce a stand alone window that could be run using preview because the PB app I was using is a copy of a commercial product.

I ran the app to check it out and the response is now coming back in at around .35 seconds on a consistent basis so I'm not sure what is going on - this is the first time I've ran the app when I've not been connected to the office network. I've ran it  dozens of times, I  never got the 0.2 seconds that I got at the office on attempt 2, but an average .35 is way better than 2 seconds. 

The app I'm using also uses HTTPClient to check the web server is up and runnin. That was also running slow, but it's  running much faster at home also. 

 

The slower response happened consistently over today and yesterday when I was in the office connected to the network. I'm not sure why this would make a difference as i'm running the API locally and the DB is also local to my PC.

As a result, I would hold on this for now. I'll do some more tests tomorrow in the office connected to the network and without a connection to check the results and see if I can make sense of what's happening. 

Best Regards

Jim

 

 

Comment
Hi Jim

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....
  1. David Peace (Powersoft "The PowerBuilder & C# People")
  2. Thursday, 27 February 2020 14:31 PM
Adding to what David said, it is normal behavior that the first time you fire a call to any particular C# Web API,IIS needs time to compile that C# Web API: https://softwareengineering.stackexchange.com/questions/97538/why-after-each-restart-my-local-net-sites-take-time-to-load-for-the-first-time But this should only be the first time that C# Web API is called since you restarted the IIS and not each time you start your client app.
  1. Armeen Mazda @Appeon
  2. Thursday, 27 February 2020 16:35 PM
There are no comments made yet.
Armeen Mazda @Appeon Accepted Answer Pending Moderation
  1. Wednesday, 26 February 2020 17:13 PM
  2. PowerBuilder Beta
  3. # 2
0
Votes
Undo

Hi Jim,

This could be a bug with the beta.  Could you please open a support ticket and upload your app that reproduces this issue?

Thanks,
Armeen

Comment
Hi David



I don't think it's the web server because I did some testing at the office. I can consistently get the Slow, fast cycle when connected to the network.



If I take the network cable out, I get a response of around 0.25 secs consistently for repeated requests..

If I put it back in, response goes back to 3.5 seconds

If I take it out, it returns to 0.25 secs.

.... above pattern repeats consistently.



The same front end and web server are running locally on my PC while I'm testing and there's no sign of latency when the network is disconnected, so I think something else is causing the problem although I've no idea what is resulting in the slow response.



One good thing is that I know that a 0.25 response is possible.



Cheers



Jim





  1. Jim Nesbitt
  2. Thursday, 27 February 2020 16:17 PM
Hi Jim,



Unfortunately, I have tested it repeatedly on my end but still can’t reproduce this issue.

No matter whether there are new data updated in the DataWindow or not, it takes about 0.2-0.3s for the Submit function to response.



Are there any special settings between the computer in your office and that in your home?



Regards,
  1. Mark Lee @Appeon
  2. Thursday, 19 March 2020 01:59 AM
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.