Eu preciso definir ajuda NET HttpWebRequest tempo limite
-
23-08-2019 - |
Pergunta
O meu objectivo é obter a resposta de até 6000 URLs em menor tempo. Ele estava funcionando muito bem (12 segundos para 5200 Endereços LAN) até algum atraso começou a acontecer.
Meu código utiliza até 20 simultânea HttpWebRequest.BeginGetResponse com ThreadPool.RegisterWaitForSingleObject
para a manipulação de tempo limite.
No entanto, alguns (até 4 em 5.000) dos pedidos nunca bateu a função TimeoutCallback com o segundo parâmetro (TimedOut) verdadeiro, e eles perdem 5 minutos do meu tempo precioso, até que atingiu função theBeginGetResponseCallback e depois levantar um WebException. As exceções diz algo como "a operação atingiu o limite de tempo", mas como a mensagem de exceção é em português (minha língua nativa) eu não poderia Google-lo.
Gostaria de saber se posso reduzir esse prazo para 20 segundos, por exemplo. Alguém sabe como? Eu já tentei:
<system.web>
<httpRuntime executionTimeout="20"/>
</system.web>
Mas como eu estou correndo-lo como um aplicativo de console, as configurações do ASP.NET não funcionam. E eu também tentei:
myHttpWebRequest.Timeout = 20*1000;
E
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);
Sem sucesso. Você pode me ajudar?
Atualizar O que estou tentando dizer é que há 4 possíveis resultados para uma solicitação HTTP assíncrona:
- Nunca chegar a função de retorno -> tempo limite de retorno de chamada função
- alcança e respostas com sucesso
- alcança e levanta uma exceção
- Atraso exatamente 5 minutos até levantar uma exceção web "limite de tempo" dentro da função de retorno
A 4ª possibilidade é a única está atrasando minha candidatura, e eu não sei como para encurtar o atraso
Atualizar
Existe uma possibilidade de que o método GetResponseStream
vez do GetResponse
é que faz com que o tempo limite?
Solução
Parece que você precisa para definir a propriedade ReadWriteTimeout do objecto pedido.
Outras dicas
.Timeout = tempo gasto a tentar estabelecer uma ligação (não incluindo tempo de pesquisa) .ReadWriteTimeout = tempo gasto tentando ler ou gravar dados após a conexão estabelecida