我有一个用 VB.NET 编写的应用程序(不是asp.net,它是一个 Windows 控制台应用程序)。我正在尝试调用一个 url(一个 html 页面)并将响应返回到一个字符串中。响应是直接的 JSON,没有任何 html 标签。它以 开头{
和以 结尾}
。
我很好地创建了 HttpWebRequest 对象。然后调用req.GetResponse()
。一旦我这样做,我就会得到错误The underlying connection was closed: The connection was closed unexpectedly.
,我一直在谷歌搜索和检查 stackoverflow,并尝试了我发现适用的所有内容(其中很多与 WCF 服务配置有关,这些配置不适用)。
这是我的代码:
Public Function GetJSON(ByRef d As db.Device) As Boolean
Try
d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value
Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
// req.Accept = "*/*"
// req.Timeout = 30000
// req.ReadWriteTimeout = 30000
// req.KeepAlive = False
// req.UseDefaultCredentials = True
// req.CachePolicy = HttpWebRequest.DefaultCachePolicy
// req.Proxy = HttpWebRequest.DefaultWebProxy
// req.ProtocolVersion = New System.Version(1, 0)
Dim rsp As HttpWebResponse = req.GetResponse()
Return True
Catch ex As Exception
Log(ex.Message)
Return False
Finally
rsp = Nothing
req = Nothing
End Try
End Function
注释掉的行(错误的注释样式,但 SO 会正确解析)是我迄今为止根据我在网上找到的所有内容。他们都没有修复它。我已经验证了正在构建的 URL 是正确的;如果我在浏览器中调用完全相同的 URL,它会返回完全正确的预期响应。
我已经尝试对其进行wiresharking ...我看到实际预期的完整数据在鲨鱼输出中返回,然后是几行,然后是一条红线,上面写着:
http > 51943 [RST] Seq=1607 Win=0 Len=0
这是.NET之前出现的最后一行正在抛出错误。
我还尝试在 SO 上的每个帖子中打开System.Net
跟踪/日志记录,并且在输出文件中,我同样看到所有预期的 JSON 数据确实回来了,但是在它回来之后,它会在 .NET 跟踪日志中抛出这些行:
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 1605#1605
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Receive()
System.Net.Sockets Verbose: 0 : [7040] Data from Socket#60467532::Receive
System.Net.Sockets Verbose: 0 : [7040] 00000000 : :
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 0#0
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Dispose()
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816:: - The underlying connection was closed: The connection was closed unexpectedly.
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816::GetResponse - The underlying connection was closed: The connection was closed unexpectedly.
有什么想法可以尝试解决这个问题吗?我们正在从一些环境监测传感器设备中读取这些数据,他们给了我们这个 url 供我们使用。
真正让我感到困惑和困惑的两件事是
a) 在浏览器中调用时它工作得非常好
b) WireShark 和 .NET 跟踪都显示所有数据实际上正在返回,并且框架出于某种原因除了 AFTER接收所有数据!
WebException 本身很少使用,因为它的 InnerException 为 null 并且它的状态只是说“ConnectionClosed {8}”
提前致谢!!!
更新 08/18 1130:我现在也尝试使用System.Net.WebRequest
与HttpWebRequest
. 这也没有任何区别。
更新 08/18 1222:我只是尝试切换我的代码而不是使用[Http]Web[Request|Response]
来调暗WebClient
对象并使用它的DownloadString()
方法。然而,这也会引发同样的错误。
更新 08/18 1230:尝试使用My.Computer.Network.DownloadFile()
- 也得到相同的连接关闭错误。