我阅读了许多Stack Overflow问题(例如这个),讨论以下错误消息的变体:
系统。将内容复制到流时出错。-
但是,我在错误消息中收到以下变体:
系统。将内容复制到流时出错。-
没有指示“被远程主机强制关闭”异常消息中没有进一步详细说明它被关闭的确切原因。
为什么会这样?这是否意味着我这边出现了超时或其他什么,或者这是我们供应商方面的问题?(我想在向我们的供应商提出调查之前确定问题的“错误”是谁的)。
我正在下载的特定文件非常大,可能需要很长时间才能下载。
我的代码是非常“标准”的HttpClient
“get”逻辑:
private async Task<string> GetReport(string fileNamePrefix, bool lookInCurrentFolder = false, bool returnEntireThing = true)
{
string fileName = $"{fileNamePrefix}-report-{DateTime.Now.ToString("yyyy-MM-dd")}.csv";
string downloadFolder = FileUtilities.GetPath(KnownFolder.Downloads);
string fileInDownloadFolder = Path.Combine(downloadFolder, fileName);
if ((lookInCurrentFolder && !File.Exists(fileName)) || (!lookInCurrentFolder && !File.Exists(fileInDownloadFolder)))
{
HttpClient client = HttpClientConstructor.GetHttpClient(acceptVersion: false, acceptType: "text/csv");
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
using (HttpResponseMessage msg = await client.GetAsync("analytics/" + fileNamePrefix))
{
using (var fstr = new FileStream(lookInCurrentFolder ? fileName : fileInDownloadFolder, FileMode.Create))
{
using (GZipStream str = new GZipStream(await msg.Content.ReadAsStreamAsync(), CompressionMode.Decompress))
{
str.CopyTo(fstr);
}
}
}
}
return returnEntireThing ? File.ReadAllText(lookInCurrentFolder ? fileName : fileInDownloadFolder) : (lookInCurrentFolder ? fileName : fileInDownloadFolder);
}
稍微缩写一下,HttpClientCon结构器
是一个工厂,它返回适当的HttpClient
单例(因为Microsoft建议在整个应用程序生命周期中使用一个Http客户端
)。可能会有几个HttpClient
的实例,具有几个不同的接受类型
配置。这些实例或多或少是这样创建的:
var client = new HttpClient
{
BaseAddress = new Uri("..."),
Timeout = new TimeSpan(4, 0, 0)
};
client.DefaultRequestHeaders.Add("ApiToken", key);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptType));
这里出了什么问题?为什么有奇怪的错误消息?这可能是我这边的问题吗?
编辑:在< code > HttpClientConstructor 中创建我的< code>HttpClient实例之前,我将这样设置安全设置:
ServicePointManager.DefaultConnectionLimit = 8;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
此外,这个问题是间歇性的-代码大部分时间都有效,这是我第一次看到这种情况发生。
我在使用共享HttpClient
连接到服务器进行REST调用时遇到了类似的问题。问题最终是客户端和服务器上的KeepAlive
超时不匹配。客户端超时由ServicePointManager
上的MaxServicePointIdleTime
设置设置,默认为100秒。在我们的服务器中,服务器端空闲超时设置为较短的值。
与客户端相比,服务器上的超时时间更短,导致服务器在客户端尝试连接时偶尔关闭连接。这导致了报告的异常。
请注意,我最终发现了问题,因为我也在相同的条件下收到了这个异常:
System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.
虽然这个问题可以通过为每个到服务器的连接使用一个新的< code>HttpClient来解决,但是这违背了Microsoft关于共享< code>HttpClient的建议。我建议将< code > maxservepointidletime 设置为一个较短的值,比如15秒,看看是否能解决这个问题。或者,如果您可以访问服务器代码,您可以找到它的超时值,并尝试将其设置为一个比客户机上默认的100秒超时值更长的值。
我正在尝试推出一个WatiN开发的网络机器人(通过火狐)。它在我的电脑上启动并运行得很好(即使没有以管理员身份启动),但是当我从我的VPS(我不是管理员)启动它时,Firefox和我的应用程序立即崩溃。 控制台显示(我是从法语翻译过来的): 未处理的异常:System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭了一个现有连接。---->System.Net.Socket
我正在尝试使用Microsoft.Exchange.WebServices.dll(EWS API)在office 365上保存电子邮件 它会随机抛出异常: 无法从传输连接读取数据:远程主机强制关闭了一个现有连接。 在System.Net.Security._SSLStream.EndRead(IAsyncResult asyncResult) 在system.net.tlsstream.endr
看来是从到达这里的,我也在我的项目中使用它 但这只是一个假设。问题可能出在别的地方。有什么想法吗?
我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)
我想通过pymongo阅读集合,但我得到以下错误: 回溯(最近的调用为last):文件“C://users/gsingh/pycharmprojects/mc/quizQuestionAnswers.py”,第21行,pprint.pprint(posts.find_one())文件“C:\users\gsingh\appdata\local\continuum\anaconda2\lib\sit