我的应用随机生成以下错误。我还没有能够在我的机器上重新生产它,但是对于安装它的用户来说,它恰好在它们身上。
System.Net.WebException: The request was aborted: The request was canceled.
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.ReadToEnd()
奇怪的是,ReadToEnd()无法产生WebException错误(通过将鼠标悬停在它上面并查看它可能导致的异常类型),但是从这个崩溃转储中它是什么?,以确保我甚至放了一个WebException尝试抓住它仍然会发生。
我在线阅读了一点,看到它可能是由ServicePointManager.DefaultConnectionLimit
引起的所以我添加了1000 in int值,现在我不确定它是否修复它 - 我还没有看到任何报告,但是没有意味着它没有发生。
using (HttpWebResponse resp = (HttpWebResponse)r.GetResponse())
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string s = "";
try { s = sr.ReadToEnd(); }
catch (IOException) { return "2"; }
catch (WebException) { return "2"; }
}
这是我正在使用的代码,如果需要,我可以提供r的值。只知道我使用了很多。
编辑:我可以在客户端确认即使ServicePointManager.DefaultConnectionLimit设置为1000,它仍然会发生。
答案 0 :(得分:0)
前段时间我遇到过类似的问题。你可以像这样处理WexException:
public static HttpWebResponse GetHttpResponse(this HttpWebRequest request)
{
try
{
return (HttpWebResponse) request.GetResponse();
}
catch (WebException ex)
{
if(ex.Response == null || ex.Status != WebExceptionStatus.ProtocolError)
throw;
return (HttpWebResponse)ex.Response;
}
}
我从答案者那里借用了上面的代码:HttpWebRequest.GetResponse throws WebException on HTTP 304
然后代码的第一行会执行此操作:
using (HttpWebResponse resp = GetHttpResponse(r))
答案 1 :(得分:0)
找出了解决问题的方法,不知道为什么,但这样做有效:
try
{
using (HttpWebResponse resp = httpparse.response(r))
{
if(resp != null)
{
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string s = "";
try { s = sr.ReadToEnd(); }
catch (IOException) { return "2"; }
}
} else
{
return "2";
}
}
}
catch (WebException)
{
return "2";
}
没有意义,错误发生在sr.ReadToEnd(),但是将Try Catch放在响应()上会使它修复吗?