Страница: 1 |
Страница: 1 |
Вопрос: Помогите с повторным вызовом процедуры
Добавлено: 27.10.08 18:03
Автор вопроса: Jaychibek | ICQ: презираю
Есть определенная задача вытащить отчеты через веб-сайт за определенную дату. Но возникает ситуация когда при таймауте система выдает ошибку. Соответственно номер ошибку отловил и поставил обработчик ошибки, но при повторном вызове процедуры (чтоб он повторил запрос за текущую дату) ошибка не исчезает и сразу же отлавливается обработчиком ошибки и выкидавает из процедуры и запускается заново что соответсвенно ситуация повторяется. Что можно сделать чтоб рекурсивно вызванная процедура работала?
Вкратце излагаю исходник процедуры
connection(ByVal strOutputPaths As String, ByVal strDate As String)
.........................................................................................................
On Error GoTo Err_
.......................................................................................................
Dim MyHttpRequest As HttpWebRequest = HttpWebRequest.Create(strLinkName)
Dim MyHttpResponse As HttpWebResponse = MyHttpRequest.GetResponse()
Dim MyStream As New StreamReader(MyHttpResponse.GetResponseStream)
MyHttpRequest.Credentials = New NetworkCredential(strUserLogin, strUserPassword)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
ServicePointManager.CertificatePolicy = New MyCertificateValidation
MyHttpRequest.Method = "GET"
MyHttpRequest.ContentType = "application/x-www-form-urlencoded"
MyHttpRequest.Headers.Add("Accept-Encoding", "")
MyHttpRequest.Timeout = 120000
MyHttpRequest.Proxy = New WebProxy("MyProxy", MyPort)
MyHttpRequest.Proxy.Credentials = CredentialCache.DefaultCredentials
clsMyStreamWriter = File.AppendText(strPathName)
clsMyStreamWriter.Write(MyStream.ReadToEnd)
clsMyStreamWriter.Flush()
clsMyStreamWriter.Close()
'If MyStream.EndOfStream Then MessageBox.Show("Поток скачан")
MyStream.Close()
MyHttpResponse.Close()
MyHttpResponse.Close()
'MsgBox(MyStream.ReadToEnd)
Exit Sub
Err_: Select Case Err.Number
Case 5 : Err.Clear(): connection(frmMegaReport.txtOutputPathName.Text, strMegaDate)
end sub
[/code]
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 27.10.08 18:49
Для начала не плохо было бы тебе почитать про обработку ошибок в NET и класс System.Exception, затем поправить свой код в соответствии с полученными знаниями, затем хорошо бы получить развернутое описание ошибки и номер строки в которой возникает ошибка. Ну а после этого можно уже детально поговорить о твоей проблеме..
Номер ответа: 2
Автор ответа:
Jaychibek
ICQ: презираю
Вопросов: 10
Ответов: 20
Профиль | | #2
Добавлено: 27.10.08 19:38
Номер ответа: 3
Автор ответа:
Jaychibek
ICQ: презираю
Вопросов: 10
Ответов: 20
Профиль | | #3
Добавлено: 27.10.08 19:39
выходит методом обработки исключительных ситуация надо делать?
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 27.10.08 21:35
ВО всяком случае этот подход правильный и он тебе позволит узнать детали самой ошибки и строку кода где возникает ошибка. Останется только узнать ПОЧЕМУ она возникает.. Кроме того, ты из тела процедуры вызываешь эту же процедуру - это называется рекурсия(в твоем случае это не лучший способ. Правильней было бы реализовать цикл через do... while. В котором вести,скажем, число попыток. Если, к примеру, после 5 попыток скачать не удалось, значит вываливаем юзеру сообщение об ошибке и выходим из этой процедуры). В случае ошибки у тебе происходит зацикливание и как следствие - переполнение стека (имхо: именно в этом твоя ошибка и заключается)