【发布时间】:2011-03-02 09:14:49
【问题描述】:
好的,我们有一个应用程序,它包含一个托管多个 ASMX Web 服务的网站,以及一个在 WinMo 6.1 上运行并调用 Web 服务的手持应用程序。
一直在办公室开发,一切都很完美。
现在我们已经在客户端安装它,我们已经设置了所有服务器并安装了手持设备。然而,手持设备现在不再能够连接到网络服务。
我在错误处理程序中添加了额外代码,专门捕获 WebException 异常并在日志记录中以不同方式处理它们以输出额外信息(.Status 和 .Response)。
我正在获取返回[7] 或ProtocolError 的状态。但是,当我尝试读出 ResponseStream(使用WebException.Response.GetResponseStream)时,它返回了一个CanRead 设置为False 的流,因此我无法获得有关问题的更多详细信息。
所以我想我要寻求帮助的有两件事......
a) 对尝试从WebException 获取更多信息有任何帮助吗?
b) 什么可能导致ProtocolError 异常?
由于客户端在现场有一个完整的支持登录的代理设置,事情变得更加复杂。这最初阻止了对网站的所有访问,即使是从浏览器中也是如此。因此,我们在 WinMo 设备上的 HTTP 网络连接中输入了登录详细信息。现在它可以正常访问网站了。
事实上,我什至可以很好地启动 web 服务并调用 从浏览器 (PocketIE) 的方法。所以我知道设备能够通过 HTTP 看到 web 服务。但是当尝试从 .NET 应用程序调用它们时,它会抛出 ProtocolError [7]。
这是我的代码,它记录了异常并且未能从WebException 中读出Response。
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
提前致谢!
【问题讨论】:
标签: web-services .net-3.5 compact-framework proxy asmx