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
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