J'ai le code suivant, et après ~ 60 fois l'appelant (20 connexions simultanées) il commence à expirer. Si je baisse le délai de 10 minutes à 1 minute, ils commencent à attendre environ 34 téléchargements. ce qui donne? Je sais que vous pouvez obtenir si vous ne ferme pas correctement votre réponse, mais je ferme certainement:Timeout avec HttpWebResponse dans .NET
//===============================================================================
/// <summary>
/// Executes the request and returns the response as a byte array. Useful if the
/// response should return a file.
/// </summary>
private static byte[] GetResponse(HttpWebRequest webRequest)
{
//---- declare vars
HttpWebResponse response = null;
List<byte> buffer = new List<byte>();
int readByte;
//---- try to get the response, always wrap it.
try
{ response = webRequest.GetResponse() as HttpWebResponse; }
//---- catch all
catch (Exception e)
{
if (response != null) { response.Close(); }
throw new ConnectionFailedException("Failed to get a response", e);
}
try
{
//---- if the response is ok
if (response.StatusCode == HttpStatusCode.OK)
{
//---- get the response stream
using (Stream stream = response.GetResponseStream())
{
//---- read each byte, one by one into the byte buffer
while ((readByte = stream.ReadByte()) > -1)
{
buffer.Add((byte)readByte);
}
//---- close the stream
stream.Close();
response.Close();
}
//---- return the buffer as a byte array
return buffer.ToArray();
}
//---- if the request wasn't auth'd
else if (response.StatusCode == HttpStatusCode.Forbidden || response.StatusCode == HttpStatusCode.Unauthorized)
{
if (response != null) { response.Close(); }
throw new AuthenticationFailedException(response.StatusDescription);
}
//---- any other errors
else
{
if (response != null) { response.Close(); }
throw new ConnectionFailedException(response.StatusDescription);
}
}
finally { if (response != null) { response.Close(); } }
}
//===============================================================================
pensées?
aussi, je crée avec les deux TimeOut et ReadWriteTimeout fixé à 10 minutes:
// ---- créer la demande web HttpWebRequest webRequest = WebRequest.Create (url) comme HttpWebRequest;
// ---- définir un délai de 10 minutes webRequest.Timeout = 600000; webRequest.ReadWriteTimeout = 600000;
ne peut pas utiliser WebClient. besoin de spécifier des en-têtes personnalisés et l'authentification. –
@bryan, 'client.Headers [" Custom-Header "] =" Valeur personnalisée "' et 'client.Credentials'. –
Je devrais aller de cette façon, mais il y avait d'autres raisons pour lesquelles je ne pouvais pas l'utiliser initialement, je ne me souviens pas de ce qu'ils étaient. une limitation avec WebClient. –