Hi! Hei John! Asgarv!!HttpWebRequest timar ut hela tiden
Jag skriver en applikation som ska söka genom webbsidor efter brutna länkar.
Jag loopar igenom varje URL jag hittar i en sida, och öppnar dem med hjälp av HttpWebRequest.
De första tre eller fyra funkar perfekt, men sen får jag bara "The operation has timed out" på varenda request.
Här är min kod:
<code>
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Public Class Form1
Inherits System.Windows.Forms.Form
Private Const MAX_LEVEL = 5
Private asx(0) As String
Private xuri As Collection
Dim result As HttpWebResponse
Dim req As HttpWebRequest
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
Private Sub ScanPage(ByVal URI As Uri)
If URI.CheckHostName(URI.Host) And URI.Scheme = "http" Then
req = WebRequest.Create(URI)
Else
Exit Sub
End If
req.Timeout = 2000
Try
result = req.GetResponse()
Catch ex As Exception
Debug.Write(URI.AbsoluteUri & ": " & ex.Message & vbCrLf)
result = Nothing
req = Nothing
Exit Sub
End Try
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.GetEncoding("UTF-7")
sr = New StreamReader(ReceiveStream, encode)
Dim RegExp As New
Regex("(?<absurl>http://[\w\.\-/\?=#,&%{}]*)|(?<relurl>(?<=href=(""|'))[\w\.
\-/\?=#,&%{}:\ ]*(?<!(""|')))", RegexOptions.IgnoreCase)
Dim read(32767) As Char
sr.Read(read, 0, 32767)
Dim s As String = New String(read, 0, 32767)
Dim m As Match, u As Uri
Dim mc As MatchCollection = RegExp.Matches(s)
For Each m In mc
If m.Groups("absurl").Success Then
u = New Uri(m.Value)
Try
xuri.Add(u, u.AbsoluteUri)
Catch
End Try
ElseIf m.Groups("relurl").Success Then
u = New Uri(URI, m.Value)
Try
xuri.Add(u, u.AbsoluteUri)
Catch
End Try
End If
Next m
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim u As Uri = New Uri(http://www.somedomain.com)
ScanPage(u)
Do While xuri.Count > 0
ScanPage(xuri.Item(1))
xuri.Remove(1)
Loop
result = Nothing
req = Nothing
ReceiveStream = Nothing
encode = Nothing
sr = Nothing
u = Nothing
End Sub
Friend WithEvents Label1 As System.Windows.Forms.Label
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
xuri = New Collection()
End Sub
End Class
</code>
Någon?
/johnSv: HttpWebRequest timar ut hela tiden
Årsaken til dine time-outs er at du ikke stenger response streamen. Legg til fölgende rad:
<code>result.Close() </code>
Close stenger response streamen og släpper fri internet connection så at den kan återvinnas til nästa connection du gjör.
En annen sak: Du forutsätter at alla response er UTF-7. Du borde kanske kolla hva responsen har för encoding.Sv: HttpWebRequest timar ut hela tiden
det är alltid så fantastikt kul att Microsoft alltid MÅSTE ha med disclamers!!! Vad som än sägs eller hävdas.
Är det samma sak när ni ska boka lunchdater med varandra?? :-)
//Mikael.NET