C# post数据时 出现如下错误: System.Net.WebException: 操作超时
net(客户端)调用IIS(服务端)出现503后,就报操作超时错误
问题描述:
服务端环境:
IIS
客户端环境:
windowsxp + iis + .net
调用时出现如下错误:
System.Net.WebException: 远程服务器返回错误: (503) 服务器不可用。
在 System.Net.HttpWebRequest.GetResponse()
在 TestWebRequest.WebMessage.SendRequest(Byte[] data, String urlStr)
接着就出现如下错误:
System.Net.WebException: 操作超时
在 System.Net.HttpWebRequest.GetRequestStream()
最后一直是这个错误
System.Net.WebException: 操作超时
在 System.Net.HttpWebRequest.GetRequestStream()
当服务器恢复正常时,访问已经是200时,这个线程还是返回操作超时,经过N多测试,最后如下一行完美解决:
myRequest.ServicePoint.Expect100Continue = false;
public byte[] SendRequest(byte[] data, string urlStr) 2{ 3try 4{ 5 Stream streamSend = null; 6 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urlStr); 7 myRequest.Method = "POST"; 8 myRequest.ContentType = "text/xml"; 9 myRequest.Accept = "*/*"; 10 myRequest.Timeout = 2000; 11 myRequest.UserAgent = "Mozilla-Firefox-Spider(Wenanry)"; 12 myRequest.ContentLength = data.Length; 13//这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据 14 myRequest.ServicePoint.Expect100Continue = false; 15 16 HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); 17 myRequest.CachePolicy = noCachePolicy; 18 19try 20{ 21 streamSend = myRequest.GetRequestStream(); 22 streamSend.Write(data, 0, data.Length); 23 streamSend.Close(); 24 } 25catch (WebException wex) 26{ 27 log.Debug("WebException=" + wex.ToString() + ",wex.Status=" + wex.Status); 28if (streamSend != null) 29 streamSend.Close(); 30 streamSend = null; 31 myRequest = null; 32return null; 33 } 34catch (Exception ex) 35{ 36 log.Debug("GetRequestStream=" + ex.ToString()); 37if (streamSend != null) 38 streamSend.Close(); 39 myRequest = null; 40return null; 41 } 42 43byte[] byteArr = new byte[256]; 44 Stream streamRequest = null; 45try 46{ 47 streamRequest = myRequest.GetResponse().GetResponseStream(); 48 } 49catch (Exception httpex) 50{ 51 log.Debug("SendRequest=" + httpex.ToString()); 52if (streamRequest != null) 53 streamRequest.Close(); 54 myRequest = null; 55return null; 56 } 57 Bytes bytes = new Bytes(); 58int count = streamRequest.Read(byteArr, 0, 256); 59while (count > 0) 60{ 61 bytes.writeByteArr(Bytes.byteSub(byteArr, 0, count)); 62 count = streamRequest.Read(byteArr, 0, 256); 63 } 64 streamRequest.Close(); 65return bytes.getByte; 66 } 67catch (Exception eee) 68{ 69 log.Debug("eee=" + eee.ToString() + eee.Source + eee.StackTrace); 70 } 71return null;
或使用:
ServicePointManager.Expect100Continue = false
(未证实)
转自:https://blog.csdn.net/fuyifang/article/details/44303659