Estoy escribiendo un rastreador web para un sitio específico. La aplicación es una aplicación de Windows Forms de VB.Net que es que no es que utiliza varios subprocesos: cada solicitud web es consecutiva. Sin embargo, después de diez recuperaciones de página exitosas, cada solicitud sucesiva agota el tiempo de espera.Tiempo de espera HttpWebRequest después de diez solicitudes consecutivas
He revisado las preguntas similares ya publicados aquí en SO, y han aplicado las técnicas recomendadas en mi rutina getPage, que se muestran a continuación:
Public Function GetPage(ByVal url As String) As String
Dim result As String = String.Empty
Dim uri As New Uri(url)
Dim sp As ServicePoint = ServicePointManager.FindServicePoint(uri)
sp.ConnectionLimit = 100
Dim request As HttpWebRequest = WebRequest.Create(uri)
request.KeepAlive = False
request.Timeout = 15000
Try
Using response As HttpWebResponse = DirectCast(request.GetResponse, HttpWebResponse)
Using dataStream As Stream = response.GetResponseStream()
Using reader As New StreamReader(dataStream)
If response.StatusCode <> HttpStatusCode.OK Then
Throw New Exception("Got response status code: " + response.StatusCode)
End If
result = reader.ReadToEnd()
End Using
End Using
response.Close()
End Using
Catch ex As Exception
Dim msg As String = "Error reading page """ & url & """. " & ex.Message
Logger.LogMessage(msg, LogOutputLevel.Diagnostics)
End Try
Return result
End Function
¿Me he perdido algo? ¿No estoy cerrando o eliminando un objeto que debería ser? Parece extraño que siempre suceda después de diez solicitudes consecutivas.
Notas:
En el constructor de la clase en la que este método reside he lo siguiente:
ServicePointManager.DefaultConnectionLimit = 100
Si fijo KeepAlive true, los tiempos de espera comienzan después de cinco solicitudes.
Todas las solicitudes están para páginas en el mismo dominio.
EDITAR
he añadido un retardo entre cada solicitud Web de entre dos y siete segundos, de modo que no parecen estar "martilleo" del sitio o de intentar un ataque DoS. Sin embargo, el problema aún ocurre.
¿Cuál es el nombre del producto y la versión del servidor web que aloja la aplicación? – David
Hay un límite de 10 conexiones a IIS 5 – David
Tengo curiosidad, ¿alguna vez has identificado la causa? Me estoy encontrando con el mismo problema. –