I have now several times seen a pattern with Domino Web Services that, when consumed, seemingly have poor performance, but when I have looked closer, the problem actually lies with the Domino HTTP server being configured to utilise HTTP Persistent Connections.
We have in the last couple of years built quite a large collection of Web Services that give access to data and business logic that is available in our Lotus Notes-based Document Management solution (called Profile ESDH).
A number of our customers have built solutions that use these web services, usually contracting with a consulting company that is using something running on MS' ASP.
Then, when we (they) move from development to production, they see poor performance. And the performance issue lies with our services being unable to reply in less than 30 seconds.
What I have found is that the problem lies with the Domino HTTP Server being enabled for HTTP Persistent Connections:
What happens is that the Web Service sends it's reply quickly, but the reply from the web service also contains information that tells the consumer that the connection is kept open.
I don't remember if it is on the network packet level or if it is in the HTTP header of the reply that this happens. It's a long time ago that I first debugged this behaviour.
The way that we first see that we have an issue like this is when we examine log files on both the Web Service end and the consumer end.
We will see that our log (using a Lotusscript log class that we always use in our Web Services) says that the web service started at 10:38:10 and stopped at 10:38:12, while the consumer has a log that shows that it initially sent the HTTP request at 10:38:10 and the response was received at 10:38:42 or perhaps even later.
Where did the 30 seconds go?
Actually, the consumer had been sitting with the complete service reply for 30 seconds, but it was waiting for the reply to be flagged as closed from the web service provider.
Now, the screen dump above does not show 30 seconds anywhere. And the 30 seconds are just an example from when I debugged something like this a long time ago.
I believe that the Output Timeout is what controls how long the service consumer might have to wait for it to discover that there is no more data coming from the service. So, while the web service on domino might be running for 2 seconds, it will actully be seen in the consumer end as if the reply took 180 seconds to complete.
So, to sum up: If you have a Domino server that is going to be serving a lot of Web Services, you might want to consider disabling HTTP Persistent connections.
Jens Bruntt November 26th, 2008 10:09:53