Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 604

Листинг 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()