Листинг 15.10. Группирование запросов в одном вызове Web-службы
Этот код представляет собой всего лишь последовательность вызовов функций. Программистам на VB будет несложно написать его, используя в качестве образца код на С#.
Листинг 15.11. Код для загрузки файла с Web-сервера
>'----------------------------------------------------------
>'Осуществляет синхронную загрузку файла с Web-сервера
>'и сохраняет его в локальной файловой системе
>'[in] httpWhereFrom: URL-адрес файла
>' (например, "http://someserver/somefile.jpg")
>'[in] filenameWhereTo: Место, куда необходимо записать файл
>' (например, "\\localfile.jpg")
>'----------------------------------------------------------
>Public Sub downloadFileToLocalStore(ByVal httpWhereFrom As _
> String, ByVal filenameWhereTo As String)
> Dim myFileStream As System.IO.FileStream = Nothing
> Dim myHTTPResponseStream As System.IO.Stream = Nothing
> Dim myWebRequest As System.Net.WebRequest = Nothing
> Dim myWebResponse As System.Net.WebResponse = Nothing
> 'Если файл, который мы хотим записать, уже существует, удалить его
> If (System.IO.File.Exists(filenameWhereTo) = True) Then
> System.IO.File.Delete(filenameWhereTo)
> End If
> Try
> 'Создать Web-запрос
> myWebRequest = _
> System.Net.HttpWebRequest.Create(httpWhereFrom)
> 'Получить ответ
> myWebResponse = myWebRequest.GetResponse()
> 'Получить поток для ответа
> myHTTPResponseStream = myWebResponse.GetResponseStream()
> 'Создать локальный файл, в который необходимо направить поток ответа
> myFileStream = System.IO.File.OpenWrite(filenameWhereTo)
> 'Этот размер буфера является настраиваемым
> Const buffer_length As Integer = 4000
> Dim byteBuffer() As Byte
> ReDim byteBuffer(buffer_length)
> Dim bytesIn As Integer
> 'Считать файл и направить поток данных в локальный файл
> Do
> 'Считать данные
> bytesIn = myHTTPResponseStream.Read(byteBuffer, _
> 0, buffer_length)
> 'Записать данные
> If (bytesIn <> 0) Then
> myFileStream.Write(byteBuffer, 0, bytesIn)
> End If
> Loop While (bytesIn <> 0)
> Catch myException As Exception 'Сбой при загрузке!
> 'Что-то случилось. Освободить ресурс
> attemptCleanup ThrowNoExceptions(myFileStream, _
> myHTTPResponseStream, myWebResponse)
> 'Теперь, когда ресурс освобожден, повторно сгенерируем исключение,
> 'чтобы сообщить приложению о том, что произошел сбой!
> Throw myException
> End Try
> 'Загрузка прошла успешно!
> 'Закрыть все ресурсы.
> Try
> 'Стандартная процедура закрытия ресурсов.
> myFileStream.Close()
> myFileStream = Nothing
> myHTTPResponseStream.Close()
> myHTTPResponseStream = Nothing
> myWebResponse.Close()