Хорошо, у нас есть приложение, которое состоит из веб-сайта с несколькими веб-сервисами 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
Заранее спасибо!