Artigo
Tani Frankel · Dez. 8, 2020 7min de leitura

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:

  • Tempo Limite de Resposta
  • Especifica o tempo limite para obter uma resposta do servidor web remoto.

  • Intervalo de Repetição
  • Número de segundos de espera entre as tentativas de conexão com um destino fora do Ensemble.

  • Tempo Limite de Falha
  • 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á –

  • Às 00:00 faremos a primeira chamada
  • Às 00:07, uma vez que nenhuma resposta foi retornada, reconheceremos internamente que ocorreu um erro de "Tempo Limite de Resposta" (e registraremos um "evento de erro" no Registro de Eventos - Log) e tentaremos novamente de acordo com a política e as configurações de nova tentativa - o " Tempo Limite de Falha" ainda não ocorreu, então um "Sinalizador de Necessidade de Nova Tentativa" é gerado.
  • (Às 00:08, o servidor web retornará uma resposta, mas essa resposta não será recebida por nós, pois já temos um erro com o tempo limite)
  • Às 00:10 o Intervalo de Repetição ocorreu e como o "Sinalizador de Necessidade de Nova Tentativa" foi gerado, chamaremos o servidor web novamente.
  • Às 00:17 terá ocorrido novamente nosso "Tempo Limite de Resposta" sem nenhuma resposta (observe como mencionado anteriormente a resposta enviada de volta às 00:08/passo 3 foi "ignorada/descartada"), portanto, denotaremos isso internamente como um erro (embora desta vez não adicionaremos outra entrada de erro no registro de eventos, apenas a primeira tentativa criará isso, e não todas as tentativas de falha), e como ainda não atingimos o "Tempo Limite de Falha", o "Sinalizador de Necessidade de Nova Tentativa" será ativado novamente.
  • (Às 00:18 o servidor web retornará uma resposta que, novamente, não será recebida por nós)
  • Às 00:20 outro intervalo de repetição se esgotará e chamaremos novamente a nossa tentativa.
  • Às 00:27, sem resposta, novamente o erro "Tempo Limite de Resposta" e necessidade de Tentar Novamente (ainda não atingiu o "Tempo Limite de Falha").
  • (Às 00:28 uma resposta não recebida é enviada pelo servidor)
  • Às 00:30 outro intervalo de repetição surge e fazemos a nossa (e última) tentativa.
  • Às 00:37 um "Tempo Limite de Resposta" ocorre novamente - desta vez o "Tempo Limite de Falha" passou, então não levantamos o "Sinalizador de Necessidade de Nova Tentativa", mas desistimos - registramos um evento de Erro no Registro de Eventos - Log, observando que o Tempo Limite de Falha expirou e também retornou um erro de Operação de Negócios para o item chamado.
  •  

    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 tentativa (#692), com o mesmo resultado e o mesmo comportamento subsequente, até a tentativa (#704). Após a falha da tentativa (09:53; #705), outra tentativa não é feita, pois o tempo limite de falha (30 segundos) foi excedido.

     

    00
    3 0 0 39
    Log in or sign up to continue