c# - 无法从传输连接读取数据:现有连接被强行关闭
问题描述
我正在连接 Skyview 网站 ( https://skyview.gsfc.nasa.gov/current/cgi/basicform.pl ) 以检索天文板块(即图像)。
我使用必要的参数构建 URL 并创建一个 HttpWebRequest:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
因为它是https,所以我之前插入了这些行,正如我在 SO 中的另一个线程中看到的那样:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
然后我以这种方式阅读网站答案:
List<string> resp = new List<string>();
const int BUFFER_SIZE = 1000;
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
int bytesRead;
do
{
var buffer = new byte[BUFFER_SIZE];
bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
resp.Add(Encoding.ASCII.GetString(buffer));
} while (bytesRead > 0);
}
}
}
网站回复后:
- 我解析结果(resp)
- 在其中查找板文件名
- 做另一个请求来得到它
如果印版尺寸不大,一切正常:该站点只需几分钟(不到 5 分钟)即可生成印版文件,我可以正确获取它。
当我指定更大的字段时,Skyview 需要更多时间来获取图像并将文件 URL 发回给我,大约 300 秒后,我收到此错误:
无法从传输连接读取数据:现有连接被强行关闭
如果我通过浏览器进行操作,它可以工作。我用一个相当大的图像进行了测试,它花了 21 分钟没有出现任何错误。
我在这里经历了一些解决方案,但它们似乎不适用于我的情况。
解决方案
推荐阅读
- paho - WindowBuilder update from paho callback (on MQTT Receive)
- matlab - 在 MATLAB 中仅删除绘图中的刻度
- java - 编码密码看起来不像 BCrypt 和关于角色的问题
- python - _tkinter.TclError:无效的命令名称“.!frame.!entry”
- python - 带有python客户端的Erlang回显服务器没有回显,python客户端没有正确接收响应
- reactjs - AWS Amplify in React,如何从订阅的侦听器呈现新数据
- javascript - Javascript 错误:“无法读取未定义的属性零”
- google-chrome-extension - 将 google 优化与 chrome 扩展集成时遇到不同的错误
- laravel-8 - 如何用 min 获取行数据
- reactjs - 如何在 React 中添加到父事件处理程序