×

Web Service C#

C# post数据时 出现如下错误: System.Net.WebException: 操作超时

Kalet Kalet 发表于2019-05-11 21:38:24 浏览312 评论0

抢沙发发表评论

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{3try4{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;1516 HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);17 myRequest.CachePolicy = noCachePolicy;1819try20{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 }4243byte[] byteArr = new byte[256];44 Stream streamRequest = null;45try46{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 

群贤毕至

访客