System.Net.WebException nach 2. GetRequestStream

A

Albert Ludwig

Hallo NewsGroup,

in meiner Anwendung rufe ich ein Internet-asp-script auf.
Diese Funktionalität habe ich in der Funktion "fuwHandelWebRequestPost"
(siehe unten) gekapselt.
Diese Funktion arbeitet ausgezeichnet.
Leider bereitet diese Routine Probleme (WebException), wenn innerhalb 30
sec. sie ein weiteres Mal aufgerufen wird.
Vermutlich blockiert der 1. Aufruf noch die Ressource und diese muss
explizit "geschlossen" werden.

Was muss ich tun, um mein Problem zu lösen?

Besten Dank vorab!

Ciao, Albert
***
Public Function fuwHandleWebRequestPost(ByVal pstrWebAddress As String,
_
Optional ByVal pstrParams As String =
"", _
Optional ByVal pstrFilePath As String =
"", _
Optional ByVal pbolSuppressError As
Boolean = False) _
As String
'*************************************************************************
' fuwHandleWebRequestPost: Web-Adresse mittels POST aufrufen
'----------------------------------------------------------
' In: pstrWebAddress: Web-Address (z.B.: http://www.abcde.de)
' pstrParams: Post-Params (z.B.:
var1=hugo&var2=emil&var3=egon) (darf nicht mit ? beginnen)
' (die einzelnen Variablen müssen
mittels "HttpUtility.UrlEncode" bearbeitet sein)
' pstrFilePath: File-Path, falls Web-Ergebnis gespeichert
werden sollen
' Out: Web-Ergebnis ("", falls Fehler aufgetreten ist)
'----------------------------------------------------------
'Stefan Falz [MVP] <[email protected]>
'MS MVP - Visual Developer ASP/ASP.NET
'http://www.asp-solutions.de/ - Consulting, Development
'http://aspnet.codebooks.de/ - Das ASP.NET Codebook (VB.NET)
'*************************************************************************
Dim lobjWebRequest As System.Net.HttpWebRequest
Dim lstrWebErgebnis As String
Dim s As String

'--- Init
fuwHandleWebRequestPost = "" 'zunächst
s = pstrWebAddress.Trim

'--- WebAdresse evtl. ergänzen
If s.ToLower.IndexOf("www.") >= 0 Then 'www. => Web-Address
'--- Web-Address
If s.ToLower.IndexOf("http://") < 0 Then 'kein http://
(Schemabezeichner) => ergänzen
s = "http://" & s
End If
Else 'sonst ???
End If

'--- 1/Web-Adresse mittels POST aufrufen (POST => asp: Request.Form)
Try
lobjWebRequest = Net.WebRequest.Create(s)

lobjWebRequest.Method = "POST"
lobjWebRequest.ContentLength = pstrParams.Length
lobjWebRequest.ContentType = "application/x-www-form-urlencoded"
lobjWebRequest.Timeout = (30 * 1000) 'Default: 100.000 = 100
Sec.

Dim lobjPostStream As System.IO.Stream =
lobjWebRequest.GetRequestStream
lobjPostStream.Write( _
System.Text.Encoding.ASCII.GetBytes(pstrParams),
_
0, _
pstrParams.Length _
)

Catch ex As WebException
gclsMsgHelp.fumMsgShow(161, MessageBoxIcon.Information, ,
ex.Message, CStr(lobjWebRequest.Timeout / 1000))
Return ""
Catch ex As Exception
If Not pbolSuppressError Then
MessageBox.Show("+++clsGeneral/fuwHandleProcessStart/Request:"
& ControlChars.CrLf _
& "pstrWebAddress: " & pstrWebAddress &
ControlChars.CrLf _
& "pstrParams: " & pstrParams &
ControlChars.CrLf _
& "s: " & s & ControlChars.CrLf _
& ex.ToString)
End If
Return ""
Finally
End Try

'--- 2/Web-Adresse mittels POST aufrufen (POST => asp: Request.Form)
Try
Dim lobjWebResponse As Net.HttpWebResponse
lobjWebResponse = lobjWebRequest.GetResponse

Dim lobjResponseStream As System.IO.StreamReader = _
New
System.IO.StreamReader(lobjWebResponse.GetResponseStream)
lstrWebErgebnis = lobjResponseStream.ReadToEnd()
Catch ex As Exception
If Not pbolSuppressError Then
MessageBox.Show("+++clsGeneral/fuwHandleProcessStart/Response:"
& ControlChars.CrLf _
& "pstrWebAddress: " & pstrWebAddress &
ControlChars.CrLf _
& "pstrParams: " & pstrParams &
ControlChars.CrLf _
& "s: " & s & ControlChars.CrLf _
& ex.ToString)
End If
Return ""
Finally
End Try

'--- Web-Ergebnis speichern
If pstrFilePath = "" Then 'Web-Ergebnis nicht speichern
Return lstrWebErgebnis 'Web-Daten zurückgeben
End If
If Not gclsGeneral.fugCreateFile(pstrFilePath, lstrWebErgebnis) Then
Return ""
End If

'--- OK
Return lstrWebErgebnis 'Web-Daten zurückgeben
End Function
 
H

Herfried K. Wagner [MVP]

Hallo Albert!

Albert Ludwig said:
Was muss ich tun, um mein Problem zu lösen?

In englischsprachigen Newsgroups Fragen auch auf Englisch stellen oder aber
besser in die die passende deutschsprachige .NET-Gruppe (Hierarchie
"microsoft.public.de.german.entwickler.dotnet.*") posten.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top