WebSerivce - Aumentar Timeout

1,916 views
Skip to first unread message

Felipe Aron

unread,
Apr 29, 2011, 4:28:59 PM4/29/11
to dotn...@googlegroups.com
Pessoal, montei um Webservice em .NET e estou consumindo em Delphi - até aqui sem problemas.

Porém o tempo de resposta do método é um pouco demorado, por conta do processamento da informação no método - e com isso ocorre o erro de Timeout:

"O tempo limite da operação foi atingido..."

Como fazer para aumentar esse timeout?

--
Analista-Programador

Celso Rivera

unread,
Apr 29, 2011, 4:50:08 PM4/29/11
to dotn...@googlegroups.com
seu_sqldataadpter.selectedcommand.commandtimeout = tempodesejado

Cuidado com 0, pois vai ficar indefinidamente se houver algum problema.

Abraços

> --
> ==============================
> Comunidade de desenvolvedores Dot Net no Brasil
>
> WebSite: www.dotnetbr.com
>
> E-mail do Grupo: dotn...@googlegroups.com
> ==============================
>

--
Celso Rivera
rivera...@gmail.com

danie...@gmail.com

unread,
Apr 29, 2011, 4:59:53 PM4/29/11
to dotn...@googlegroups.com
Cara, definitivamente aumentar timeout não é a melhor solução... só mascara os reais problemas.

Celso Rivera

unread,
Apr 30, 2011, 7:24:18 AM4/30/11
to dotn...@googlegroups.com
Daniel, poderia explicar quais seriam os reais problemas? Estou
começando em .net e usei esse recurso em umas 2 rotinas, se existem
problemas e uma forma melhor de fazer, gostaria de conhecer. Muito
obrigado.

Abraços

Bene

unread,
Apr 30, 2011, 7:41:53 AM4/30/11
to dotn...@googlegroups.com
Essa é uma questão complicada, o mais correto seria vc analisar se o serviço Nao esta com responsabilidades demais, caso Nao seja isso e o processamento seja realmente grande o ideal seria vc aumentar o timeout....

Enviado via iPhone

Daniel Freire

unread,
Apr 30, 2011, 2:17:31 PM4/30/11
to dotn...@googlegroups.com
Bom, não é um problema de .NET mas de qualquer plataforma. Pense bem: existe um problema que faça a resposta do seu serviço demorar 40seg quando deveria demorar 8seg. Daí vc ajusta o timeout pra 42seg. Alguns dias depois e essa resposta passa a ser de 50seg e você vai e ajusta o timeout pra 55seg. Isso não vai ter fim.

O correto é detectar o que está acontecendo pra degradar a performance do serviço. Em algum ponto existe algo que deteriora a resposta. Uma query mal feita? Um link com problemas? Daí só parando pra analisar e ver.

[]'s

2011/4/30 Celso Rivera <rivera...@gmail.com>



--
Daniel C. Freire
Analista Desenvolvedor
MCP, MCTS - Web Applications 2.0
(31) 8467-2331
@danielfreire

Waldyr Felix - Gmail

unread,
Apr 30, 2011, 10:01:15 AM4/30/11
to dotn...@googlegroups.com
Não vejo problemas em aumentar o timeout, mas é preciso analisar se realmente vc precisa de tanto tempo executando ou se há algum problema "mascarado" como falou o Daniel. Pois isso pode ter várias causas:
  • rede muito lenta
  • muitas transações no banco
  • maquina com baixo poder de processamento
  • quantidade alta de bytes sendo transferidos pela rede
E principalemente, veja se este timeout é realmente do serviço ou do banco de dados.

[]s

--
  Waldyr Felix
  Engenheiro de Software
  (81) 9212 1196 | @waldyrfelix

Celso Rivera

unread,
May 2, 2011, 7:36:14 AM5/2/11
to dotn...@googlegroups.com
Obrigado Bene, Daniel e Waldyr. Agora que entendi os problemas que
podem causar o timeout, vou tentar detectar qual deles está causando
isso.

Abraçõs

Em 30 de abril de 2011 11:01, Waldyr Felix - Gmail
<waldy...@gmail.com> escreveu:

Roger Luiz

unread,
May 2, 2011, 3:48:46 PM5/2/11
to dotn...@googlegroups.com

Eduardo Assis

unread,
Apr 30, 2011, 8:30:15 PM4/30/11
to DotNet Brasil
Pelo que entendi vc esta querendo aumentar o timeout do WebService e
nao do BD. Se for isso a solução é no web.config do seu WS faça o
seguinte:

No seu web.config vc tem os elementos:
<configuration>
<system.web>
<sessionState>

No elemento <sessionState> vc coloca o atributo timeout=NN onde NN é o
tempo desejado.

Exemplo:
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"/>

O default do timeout é 20 minutos.

De qualquer forma, conforme foi comentado em outras respostas, é
conveniente analisar o porque da ocorrencia de timeout.
> #FollowMe: @felipearon <http://twitter.com/felipearon> (http://felipearon.net)

Roger Luiz

unread,
May 2, 2011, 4:03:47 PM5/2/11
to dotn...@googlegroups.com
Na thread que eu mandei tem essa configuração também, além do timeout via BD.

Felipe Aron

unread,
May 2, 2011, 4:12:15 PM5/2/11
to dotn...@googlegroups.com
Então,

o command.CommandTimeOut serve para setar o tempo para aquele command e não para o webservice em geral.

Meu problema não está no tempo do comando... o problema é que o meu método faz o seguinte:

Pega um X de números de pedidos e verifica se existe na unidade.... faço isso através de um loop e adiciono num DataTable de retorno.

Nesse meio tempo é que ocorre o problema.

OBS: O Interessante é que via web não ocorre o problema - gerando o retorno normalmente, já no delphi após uns 30 segundos já ocorre o erro de TimeOut.

Felipe Aron

unread,
May 2, 2011, 6:35:07 PM5/2/11
to dotn...@googlegroups.com
Consegui encontrar o "foco" do problema.

No Delphi, a comunicação é feita através do HTTPRIO, onde o mesmo possui uma propriedade HtmlNode e esse por si possui 3 métodos para ajuste de Timeout:
- ConnectionTimeout
- SendTimeout
- RecievedTimeout

Alterando o tempo dos métodos o problema foi resolvido!
Reply all
Reply to author
Forward
0 new messages