Business Operation Cliente de Serviço Web - comportamento do tempo limite de resposta
Ao chamar os serviços web, há várias configurações de Business Operation que atuam juntas no controle do que acontecerá quando uma resposta não for retornada no tempo desejado.
(Observe que isso também é relevante, por exemplo, para uma chamada HTTP simples não SOAP)
As 3 configurações principais envolvidas são:
Especifica o tempo limite para obter uma resposta do servidor web remoto.
Número de segundos de espera entre as tentativas de conexão com um destino fora do Ensemble.
Número total de segundos para continuar tentando se conectar com um destino fora do Ensemble. Após esse número de segundos ter decorrido, a operação de negócios descarta os dados da mensagem e retorna um código de erro.
Colocando em palavras, isso funciona da seguinte maneira –
Vamos esperar por uma resposta do servidor web para o 'Tempo Limite de Resposta' em segundos. Se nenhuma resposta for recebida até esse momento, vamos chamar o servidor web novamente após os segundos do 'Intervalo de Repetição' terem decorrido. Continuaremos tentando uma resposta com estes segundos do 'Tempo Limite de Falha' com o tempo decorrido desde o início da primeira tentativa.
Para ilustrar, vamos olhar o seguinte exemplo –
Considere as seguintes configurações:
Em palavras –
Tempo Limite de Resposta - Esperar por 7 segundos pela resposta
Intervalo de Repetição - Tentando novamente a cada 10 segundos.
Tempo Limite de Falha - "Desistir" e tentar novamente após 30 segundos
Então, supondo que a resposta volte após exatamente 8 segundos, então o seguinte cenário ocorrerá –
A seguir, algumas "evidências" de uma chamada de amostra de acordo com o cenário acima.
Primeiro, o lado do servidor [do log SOAP] – você pode ver que recebeu 4 chamadas/requisições, com 10 segundos de intervalo, cada vez retornando uma resposta após 8 segundos a partir da requisição –
05/31/2016 14:18:45 *********************
Input to Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:18:53 *********************
Output from Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:18:55 *********************
Input to Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:03 *********************
Output from Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:05 *********************
Input to Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:13 *********************
Output from Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:15 *********************
Input to Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:23 *********************
Output from Web service with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
E agora do lado do Ensemble BO/cliente, você pode ver 4 tentativas, 10 segundos de intervalo, cada vez registrando um erro de tempo limite de resposta 7 segundos depois.
Lado do cliente
05/31/2016 14:18:45 *********************
Output from Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:18:52 *********************
Input to Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
string**** SOAP client return error. method=GetResponse, action=http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
05/31/2016 14:18:55 *********************
Output from Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:02 *********************
Input to Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
string**** SOAP client return error. method=GetResponse, action=http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
05/31/2016 14:19:05 *********************
Output from Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:12 *********************
Input to Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
string**** SOAP client return error. method=GetResponse, action=http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
05/31/2016 14:19:15 *********************
Output from Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
...
05/31/2016 14:19:22 *********************
Input to Web client with SOAP action = http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
string**** SOAP client return error. method=GetResponse, action=http://tempuri.org/Test.WSTimeouts.WebService.GetResponse
ERROR #5922: Timed out waiting for response
Aqui está o Ensemble Visual Trace:
E aqui as entradas do registro de eventos (log) –
Amostra de registro de eventos (log) com eventos de rastreamento ativado (Você pode precisar aumentar o zoom para ler melhor o texto na imagem) –
Aqui você pode observar alguns dos "funcionamentos internos" do cenário descrito acima –
No Log ID #684 a chamada inicial é feita – às 17:09:16.
Então, 7 segundos depois (09:23), obtemos o erro de tempo limite de resposta (#685). A operação então registra o erro (#687) e decide esperar mais 3 segundos até o intervalo de repetição; Intervalo de repetição de 10 segundos menos o tempo limite de resposta de 7 segundos (#688 - #690).
Decorridos os 3 segundos de espera (às 09:26; #691) é feita a 2ª tentativa (#692), com o mesmo resultado e o mesmo comportamento subsequente, até a 4ª tentativa (#704). Após a falha da 4ª tentativa (09:53; #705), outra tentativa não é feita, pois o tempo limite de falha (30 segundos) foi excedido.