08-15-2016 04:11 AM
Hi everyone,
I'm hoping you can offer some suggestions on this issue I'm having. Thanks in advance!
I have a LabVIEW web service which, in addition to its HTTP Method VIs, also has a startup VI that listens for communication over TCP from other programs I've written running on other computers. When I run the web service in debug mode (by right clicking and selecting Start) it works perfectly. I can send TCP packets to it from other computers and recieve responses. The problem is when I stop the debug mode and publish the web service, I can still view it from my browser and I can still send TCP packets from the same computer, but it doesn't work from other computers. They get a timeout error. Any idea how I can fix this?
08-15-2016 05:34 AM
Here's an example project that shows the problem. If you run the web service in debug mode and go to another computer and try to send a TCP packet to the first computer on port 1024, it works and you'll get a response of "A". But if you publish the web service and try it again from another computer, it won't connect. It will, however, work in both cases if you try it from same computer.
08-16-2016 06:28 PM
Hi prettypwnie,
I am thinking that maybe you are not using the right port. When you debug the application you are using some port and when publishing a different one.
Give a read to this document, it explains some configuration settings you should mind. There is a section called Configured Web Application Server that it will take you to what port is being used for the published application.
http://zone.ni.com/reference/en-XX/help/371361L-01/lvdialog/web_server_config_options/
I don't know if you have already set this configuration properly, so let me us know.
08-23-2016 11:49 AM
Hi, thanks for your reply. Sorry, I think I must not be explaining the problem right. I don't mean that the port for viewing the web page doesn't work. If I publish the webservice I can see my webpage by going to [server IP address]:8080/[WS name]/index.html and if it's in debug mode I can see it at the same, but with 8001 instead of 8080. But there is also some extra TCP communication in a startup VI in the web service that communicates between some other programs I wrote running on different computers, and that is what only works in debug mode. Sorry if I'm not using the right terminology. Is this just not somehing I'm supposed to be able to do? Is it some kind of security thing that is preventing the communication when published? Oh well, at least it works in debug mode...
08-25-2016 11:06 AM
Hi prettypwnie,
I am not sure if it's a security issue, can you try to publish it in a different port? You could find out if your LAN has some security impediments in that port.
It depends on what are you referring to with "extra TCP communication". I've found a few resources you can check.
https://zone.ni.com/reference/en-XX/help/371361K-01/lvconcepts/ws_web_server/#debugging
https://zone.ni.com/reference/en-XX/help/371361K-01/lvhowto/ws_enable_web_server/
https://zone.ni.com/reference/en-XX/help/371361K-01/lvconcepts/ws_web_server/
08-25-2016 11:24 AM
What I'm referring to by "extra TCP communication" is the code I have in startup.vi in the example project I posted. I've tried doing that on lots of different ports, none of them work.
I guess it seems like communicating to other computers from the webservice is just not allowed. So maybe if I want it to work I have to write a separate program to run on the same computer to receive those communications from the other computers and then send them to the web service. But that seems like a lot of extra work. I don't know if you have any other ideas?
08-26-2016 08:47 PM
Hi prettypwnie,
I am thinking of the web service limitations, I am not sure if you are allowed to access the web service through several connections (seems logic). I think looking into the web services documentation you'd get a clue about it. Your idea seems like a good solution (lot of work though) but that way you'd avoid future communications problems.
08-29-2016 11:24 AM - edited 08-29-2016 11:32 AM
Are the TCP functions in the Startup VI returning any errors?
Adding some logging information may help narrow down the problem. Check that the TCP Listeners are not giving errors by manually logging errors to a file, etc.
For some quick projects I have found it helpful to write errors into a shared variable and then add an endpoint that dumps the shared variable into a page to inspect, ie at /myWebService/errors.
You can also do normal Remote Debugging with LabVIEW Web Services but I find having a log file or endpoint listing errors around pretty useful.
Edit: Another handy TCP debugging function to run from the command line is 'netstat -a -b' which will tell you what application is using each open port. The list might be long so saving the ouput to a file to read may be helpful, ie 'netstat -a -b > C:\netstat_results.txt'