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:

  1. Nunca chegar a função de retorno -> tempo limite de retorno de chamada função
  2. alcança e respostas com sucesso
  3. alcança e levanta uma exceção
  4. 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?

Foi útil?

Solução

Parece que você precisa para definir a propriedade ReadWriteTimeout do objecto pedido.

http://blogs.msdn.com/buckh /archive/2005/02/01/365127.aspx

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top