WinMo> ASMX WebException - как получить подробности? - PullRequest
0 голосов
/ 11 июня 2010

Хорошо, у нас есть приложение, которое состоит из веб-сайта с несколькими веб-сервисами ASMX и портативного приложения, работающего на WinMo 6.1, которое вызывает веб-сервисы.

Развивался в офисе, все отлично работает.

Теперь мы пошли устанавливать его на клиентском компьютере, и мы установили все серверы и карманные компьютеры.Однако теперь карманные компьютеры больше не могут подключаться к веб-сервису.

Я добавил дополнительный код в свой обработчик ошибок, чтобы специально перехватывать исключения WebException и обрабатывать их по-разному в журнале для вывода дополнительной информации (.Status и.Отклик).

Я получаю статус, который возвращает [7] или ProtocolError.Однако, когда я пытаюсь прочитать ResponseStream (используя WebException.Response.GetResponseStream), он возвращает поток с CanRead, установленным на False, и, таким образом, я не могу получить какие-либо дополнительные сведения о том, что происходит неправильно.

Итак, я полагаю, есть две вещи, с которыми я прошу помощи ...

a) Любая помощь в попытке получить больше информации из WebException?

b) Что может вызывать исключение ProtocolError?

Все усложняется тем фактом, что на клиенте полностью настроена настройка прокси-сервера с включенным входом в систему.,Это изначально блокировало доступ к сайту, даже из браузера.Итак, мы ввели данные для входа в сетевое соединение для HTTP на устройстве WinMo.Теперь он может попасть на сайты в порядке.

На самом деле, я даже могу нормально запустить веб-сервис и вызвать методы из браузера (PocketIE).Так что я знаю, что устройство может нормально видеть веб-сервисы через HTTP.Но при попытке вызвать их из приложения .NET выдает ProtocolError [7].

Вот мой код, который регистрирует исключение и не может прочитать Response из WebException.

Public Sub LogEx(ByVal ex As Exception)
    Try
        Dim fn As String = Path.Combine(ini.CorePath, "error.log")
        Dim t = File.AppendText(fn)
        t.AutoFlush = True
        t.WriteLine(<s>===== <%= Format(GetDateTime(), "MM/dd/yyyy HH:mm:ss") %> =====<%= vbCrLf %><%= ex.Message %></s>.Value)
        t.WriteLine()
        t.WriteLine(ex.ToString)
        t.WriteLine()
        If TypeOf ex Is WebException Then
            With CType(ex, WebException)
                t.WriteLine("STATUS: " & .Status.ToString & " (" & Val(.Status) & ")")
                t.WriteLine("RESPONSE:" & vbCrLf & StreamToString(.Response.GetResponseStream()))
            End With
        End If
        t.WriteLine("=".Repeat(50))
        t.WriteLine()
        t.Close()
    Catch ix As Exception : Alert(ix) : End Try
End Sub

Private Function StreamToString(ByVal s As IO.Stream) As String
    If s Is Nothing Then Return "No response found."

    // THIS IS THE CASE BEING EXECUTED
    If Not s.CanRead Then Return "Unreadable response found."

    Dim rv As String = String.Empty, bytes As Long, buffer(4096) As Byte
    Using mem As New MemoryStream()
        Do While True
            bytes = s.Read(buffer, 0, buffer.Length)
            mem.Write(buffer, 0, bytes)

            If bytes = 0 Then Exit Do
        Loop

        mem.Position = 0
        ReDim buffer(mem.Length)
        mem.Read(buffer, 0, mem.Length)
        mem.Seek(0, SeekOrigin.Begin)
        rv = New StreamReader(mem).ReadToEnd()

        mem.Close()
    End Using

    Return rv.NullOf("Empty response found.")
End Function

Заранее спасибо!

1 Ответ

1 голос
/ 14 июня 2010

Мне не удалось получить больше информации из класса WebException. По какой-то причине GetResponseStream всегда возвращает нечитаемый поток.

Мне удалось сузить проблему до проверки подлинности прокси-сервера, написав отдельную небольшую программу, которая просто пыталась запросить веб-страницу, прочитать ответ и поместить его в текстовое поле.

Эта программа вернула ответ proxy authentication required. Я нахожу это действительно странным, потому что я помещаю информацию о прокси в настройки сетевого подключения на моем устройстве. Я хотел бы, чтобы это относилось ко всему сетевому трафику, исходящему по этому соединению; по-видимому, это касается только трафика через браузер, а не запросов приложений. Странный.

...