我有一个用VB.NET编写的应用程序(不是 asp.net,而是Windows Console应用程序)。 我试图调用一个url(一个html页面),并将响应返回到一个字符串中。 响应是纯JSON,没有任何HTML标记。 它以
我成功创建了HttpWebRequest对象。 然后调用
以下是我的代码:
被注释掉的行(注释风格不正确,但 SO 可以正确解析)是我根据网上找到的信息尝试过的所有方法。没有一个能解决它。我已经验证了正在构建的 URL 是正确的;如果我在浏览器中调用完全相同的 URL,它会返回完全正确的预期响应。
我尝试了 wiresharking 它... 我在 shark 输出中看到实际的预期完整数据返回,然后是几行,然后是一条红线,上面写着:
我还尝试打开
有什么想法可以尝试解决这个问题吗?我们正在读取一些环境监测传感器设备的数据,并且他们给了我们这个URL来使用。
其中两件事让我困惑:
a)在浏览器中调用时,它完全正常运行
b)WireShark和.NET跟踪都显示所有数据实际上确实已经返回,但由于某种原因,框架在接收到所有数据后才出现问题!
WebException本身几乎没有任何用处,因为它的InnerException为空,而其状态只是说“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() - 也会出现相同的连接关闭错误。
{
开头,并以}
结尾。我成功创建了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 它... 我在 shark 输出中看到实际的预期完整数据返回,然后是几行,然后是一条红线,上面写着:
http > 51943 [RST] Seq=1607 Win=0 Len=0
这是在 .NET 抛出错误之前显示的最后一行。我还尝试打开
System.Net
跟踪/日志记录,按照 SO 上的帖子,在输出文件中我看到类似地所有预期的 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跟踪都显示所有数据实际上确实已经返回,但由于某种原因,框架在接收到所有数据后才出现问题!
WebException本身几乎没有任何用处,因为它的InnerException为空,而其状态只是说“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() - 也会出现相同的连接关闭错误。