We're using PB 2017 R3 and making SOAP-based web service calls via the httpclient.
From our client system, we call an internal API that we host that serves as a wrapper for a 3rd party API to process credit card payments.
Everything has been working fine until the past week - the vendor API has had problems, which has resulted in all kinds of issues throughout the chain.
Long story short - we have our httpclient timeout set to 15 seconds. If our intermediary web service takes greater than 15 seconds to respond, the httpclient appears to timeout correctly (our expected message pops, etc). However, in the IIS logs we are seeing up to 3 requests initiated from the client system -- spaced 15 seconds a part.
Since this is payment logic, we have no looping or retry logic in place -- everything either works 100% and we post a payment, or we stop everything and roll back to prevent double payments, etc.
Has anyone seen anything like this with the httpclient? I wouldn't imagine that it would retry the request a 2nd or 3rd time if the timeout value is reached - but that's exactly what it looks like. We're seeing the multiple requests both in the IIS logs and via WireShark, even though we're only calling SendRequest() once.
Thanks,
John
When we hit against an endpoint via http -- we get one request (it times out at 15 seconds as expected, and there's no additional requests in the IIS logs, web service logs, or in the network traffic via WireShark).
When we hit the same endpoint via https -- we get the extra requests at whatever interval the httpclient.timeout is set at. So when we bump it from 15 seconds to 30 seconds, we see the extra requests 30 seconds apart.
I also switched back to the old SOAP proxy approach (instead of httpclient) and kept all other variables the same. Whether http or https it times out and only issued one request.
So it does appear the httpclient has an issue when issuing a SendRequest (Post via HTTPS) & the timeout is reached.
Our temporary workaround is to set the httpclient timeout > the web service timeout, so we'll react to that timeout before the client timeout is reached.