Dritter Webrequest schlägt fehl

10/10/2009 - 00:06 von Kai Wiechers | Report spam
Hallo,

in meiner Anwendung (.net Compact Framework) nutze ich für einige Funktionen
einen WebRequest. Um es zu vereinfachen habe ich das ganze in eine Function
gesteckt. Rufe ich diese auf klappt alles. Auch beim zweiten Mal. Aber exakt
beim dritten Aufruf der Function schlàgt der Timeout zu und ich bekomme eine
WebException. Warum? Ich schließe meinen Request nach gebrauch brav wieder.
Was verursacht dieses Verhalten? Hier der Code aus meiner Function:

Public Function requestbot(ByVal URI As String) As String
Try
If Strings.Left(URI, 5) = "https" Then
ServicePointManager.CertificatePolicy = New MyCertificateValidation()
End If
Dim request As WebRequest = WebRequest.Create(URI)
Dim response As HttpWebResponse = CType(request.GetResponse(),
HttpWebResponse)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
Return responseFromServer
reader.Close()
dataStream.Close()
response.Close()
Exit Try
Catch ex As WebException
Return "Fehler: Es gab ein Problem mit der Internetverbindung."
Catch ex As Exception
Return "Fehler in requestbot(): " & ex.Message
End Try
End Function

Wenn mir da jemand helfen kann wàre das super! Danke schon mal und bis dann!
 

Lesen sie die antworten

#1 Elmar Boye
10/10/2009 - 09:18 | Warnen spam
Hallo Kai,

"Kai Wiechers" schrieb ...
in meiner Anwendung (.net Compact Framework) nutze ich für einige Funktionen einen WebRequest. Um es zu vereinfachen habe ich das
ganze in eine Function gesteckt. Rufe ich diese auf klappt alles. Auch beim zweiten Mal. Aber exakt beim dritten Aufruf der
Function schlàgt der Timeout zu und ich bekomme eine WebException. Warum?



Wieso beim dritten kann ich Dir nicht sagen...

Ich schließe meinen Request nach gebrauch brav wieder.



... nur das tust Du leider nicht.
Durch Dein vorzeitiges return, werden die Close Methoden nicht ausgeführt.

Dim request As WebRequest = WebRequest.Create(URI)
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
Return responseFromServer
reader.Close()
dataStream.Close()
response.Close()



Damit die Objekte freigegeben werden, solltest Du den Code àndern in:

using response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
using dataStream As Stream = response.GetResponseStream()
using reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
Return responseFromServer
end using
end using
end using

Gruß Elmar

Ähnliche fragen