C# HttpWebRequest GetRequestStream系统在多次随机调用后出现异常
我在C#.NET 3.5 CompactFramework中有一个程序,它从C#Web服务请求数据:C# HttpWebRequest GetRequestStream系统在多次随机调用后出现异常,c#,exception,httpwebrequest,getresponsestream,C#,Exception,Httpwebrequest,Getresponsestream,我在C#.NET 3.5 CompactFramework中有一个程序,它从C#Web服务请求数据: public SynchronisationResult<J> Get<J>(IEnumerable<DomainProxy> existingObjects, string controller, string parameters) where J : IdJsonObject) { string existingObjec
public SynchronisationResult<J> Get<J>(IEnumerable<DomainProxy> existingObjects, string controller, string parameters) where J : IdJsonObject)
{
string existingObjectsJson = JsonConvert.SerializeObject(existingObjects);
string url = GenerateUrl(controller, parameters);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.ContentType = "text/json";
request.Method = "POST";
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version11;
request.Timeout = 60000;
request.ContentLength = existingObjectsJson.Length;
using (Stream requestStream = request.GetRequestStream())
{
using (var streamWriter = new StreamWriter(requestStream))
{
streamWriter.Write(existingObjectsJson);
streamWriter.Flush();
streamWriter.Close();
}
requestStream.Close();
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
string responseData = "";
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
responseData = streamReader.ReadToEnd();
}
if (response.StatusCode == HttpStatusCode.OK)
{
result = JsonConvert.DeserializeObject<SynchronisationResult<J>>(responseData);
}
else
{
throw new Exception(responseData);
}
response.Close();
}
}
有时会在System.Net.Connection…的Timer.ring中引发SystemException…,但在这种情况下,应用程序不会继续运行,即使不会将异常冒泡到下一个catch块。这意味着,我必须重置设备,它永远不会继续运行
我尝试了以下更改来解决此问题:
- request.KeepAlive=true/false
- request.Pipelines=true/false
- ServicePointManager.DefaultConnectionLimit=1000李>
- request.AutomaticDecompression=DecompressionMethods.GZip或无
request.GetRequestStream()
时有时发生的异常:
at System.Threading.Timer.startTimer(UInt32 dueTime)
at System.Threading.Timer.Change(UInt32 dueTime, UInt32 period)
at System.Threading.Timer.Change(Int32 dueTime, Int32 period)
at System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback callBack, Object state, Boolean IsHttpRequest)
at System.Net.Connection.actionSending()
at System.Net.Connection.changeState(ConnectionState state)
at System.Net.Connection.transitionRequestSent(Event e)
at System.Net.Connection.processEvent(Event e)
at System.Net.Connection.actionRequestSent()
at System.Net.Connection.changeState(ConnectionState state)
at System.Net.Connection.transitionIdle(Event e)
at System.Net.Connection.processEvent(Event e)
at System.Net.Connection.submitRequest(HttpWebRequest request)
at System.Net.ServicePoint.SubmitRequest(HttpWebRequest request, String connGroupName)
at System.Net.HttpWebRequest.SubmitRequest()
at System.Net.HttpWebRequest.finishGetRequestStream()
at System.Net.HttpWebRequest.GetRequestStream()
我也被困在这个问题上好几天了。最后我发现,如果我在后台运行Fiddler,则在
请求中不会抛出异常。GetRequestStream()
。这意味着这与fiddler正在处理的连接池有关。因此,我做了一些研究,发现以下链接解决了我的问题:
此外,在请求完成后,请确保您也中止该请求。我所做的是:
if (webrequest != null) webrequest.Abort();
对我来说,现在一切正常。你能在这里发布解决方案的相关部分吗?如果链接内容更改或消失,此答案将无效
if (webrequest != null) webrequest.Abort();