c# - 为 WebClient 关闭了基础连接
问题描述
我将一些 POST 数据发送到以下代码每 5 秒运行一次的 url。代码运行时,第一次发送数据时,没有报错。client.UploadValues
但是第二次,它在我的行中抛出了一个异常。
这是错误:
System.dll 中发生类型未处理的异常
System.Net.WebException
附加信息:基础连接已关闭:连接意外关闭。
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["email"] = email;
values["mac_addr"] = mac_addr;
values["system_name"] = system_name;
values["os_version"] = os_version;
values["screenshot"] = screenshot;
values["current_application"] = current_application;
var query = client.UploadValues(@"http://some.website.com/api/testing", values);
var responseString = Encoding.Default.GetString(query);
}
我不明白,如果我正在使用using
,那么在第一次调用之后它应该处理所有内容,对吗?那为什么会这样呢?
解决方案
我很自豪地说我使用以下代码来解决这个问题:
WebClient dataUpload = new WebClient();
NameValueCollection dataCollection = new NameValueCollection();
Uri websiteAPI = new Uri("http://some.website.com/api/test");
dataCollection.Add("email", email);
dataCollection.Add("mac_addr", mac_addr);
dataCollection.Add("system_name", system_name);
dataCollection.Add("os_version", os_version);
dataCollection.Add("current_application", current_application);
dataCollection.Add("screenshot", screenshot);
dataUpload.UploadValuesAsync(websiteAPI, "POST" ,dataCollection);
似乎使用 UploadValuesAsync 解决了这个问题。我看到需要将数据上传到 url 需要很长时间,这可能是错误的原因,因为代码每 5 秒运行一次,之前的调用没有完成,并且有一组新的本地变量和连接被称为。使用 async 可确保在进行新调用时不会中止先前的调用。
推荐阅读
- java - SSLProtocolException:SSL 握手终止:ssl=0xce70fa40:SSL 库失败,通常是协议错误
- python - 用于可扩展项目的 graphql 代码组织
- azure-devops - VSTS - 错误 MSB3202:找不到项目文件“..\Master\Master.sqlproj”
- r - 在ggplott2中的Y轴上格式化时间
- reactjs - React:第一次尝试更新组件状态失败
- c - Leetcode 问题 141 超过时间限制
- android - 意图贬值,有什么替代方案?
- ftp - Wget - 如何从 ftp 服务器下载一些文件?
- android - 适用于 Android 和 iOS 的本机应用程序。一点Javascript知识。原生脚本?反应原生?其他想法?
- vba - VBA Word - 有条件地接受页眉和页脚的更改