When a webservice is not available for processing the data, where can the data be queued up in webMethods and re-sent as input to the webservice immediately when it becomes available. this is a real time integration.
Soap server’s don’t typically do this for you by default. I believe what you are describing is a type of asynchronous web service that returns results if it is available but returns some type of requestID that can be used to retrieve results at a later time, if the service is not available.
You can certainly build this into your web services infrastructure with careful planning, but neither IS nor most other soap servers will do this for you. After all, the web services consumer is expecting a result, they are not typically expecting to have to poll for that result until your service is available once again.
We have implemented asynchronous requests on several projects. Basically, you assign a unique requestID, persist the incoming request with that ID and then return a message acknowledgement response to the consumer. The consumer makes a subsequent getResults call to retrieve the results once they are available. You can also push the results to the consumer if they are capable of receiving an incoming soap request.
This is a Real time interface. data received from source system goes as input to the web service. web service returns no response/output. target system (webservice) is not available for 5 hours everyday. and it may not be available in case of some emergency unplanned outage. but the source system is always available triggering transaction. I want to make sure when the target system is not available, the webservice is invoked again for that data when it is available the next time.
Are you suggesting that I store the data in database and then the target system webservice makes a subsequent getResults call to retrieve the results once they are available.
You can loop over the call to the web sevices and have it retry calling the web sevices. Only if it is successfull, will the call exit. See code snippet below:
LOOP (set repeat to be how many seconds you want to retry)
SEQUENCE (Try/catch block - exit on success )
SEQUENCE ( Try block - exit on Failure )
Exit from LOOP
SEQUENCE ( Catch block - exit on DONE ) Don’t put any code here
I thought Mandar Ghalsadi’s question was regarding how to do this from an external client to consume a web service hosted on IS. Rereading the question, it appears that this is not the case.
If you were doing this from Flow, you would use a Repeat (on failure) statement not a Loop statement to handle transient errors such as network issues or temporary service unavailability.
For situations in which the hosted service was going to be Falsities for extended periods of time each day you could store the requests to a database table with a status of “pending” to queue them up and then when the service because available again retrieve and resend the queued requests.
The service provider should implement a service availability check given the extended downtime each day. You could schedule and IS service that called this liveness service and only attempt to send queued requests when the service was known to be available.
In my opinion, a web service that is unavailable 5 hours each day, is poorly designed