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)
        {
            try
            {
                Stream streamSend = null;
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urlStr);
                myRequest.Method = "POST";
                myRequest.ContentType = "text/xml";
                myRequest.Accept = "*/*";
                myRequest.Timeout = 2000;
                myRequest.UserAgent = "Mozilla-Firefox-Spider(Wenanry)";
                myRequest.ContentLength = data.Length;
                //这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据
                myRequest.ServicePoint.Expect100Continue = false;

                HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
                myRequest.CachePolicy = noCachePolicy;

                try
                {
                    streamSend = myRequest.GetRequestStream();
                    streamSend.Write(data, 0, data.Length);
                    streamSend.Close();
                }
                catch (WebException wex)
                {
                    log.Debug("WebException=" + wex.ToString() + ",wex.Status=" + wex.Status);
                    if (streamSend != null)
                        streamSend.Close();
                    streamSend = null;
                    myRequest = null;
                    return null;
                }
                catch (Exception ex)
                {
                    log.Debug("GetRequestStream=" + ex.ToString());
                    if (streamSend != null)
                        streamSend.Close();
                    myRequest = null;
                    return null;
                }

                byte[] byteArr = new byte[256];
                Stream streamRequest = null;
                try
                {
                    streamRequest = myRequest.GetResponse().GetResponseStream();
                }
                catch (Exception httpex)
                {
                    log.Debug("SendRequest=" + httpex.ToString());
                    if (streamRequest != null)
                        streamRequest.Close();
                    myRequest = null;
                    return null;
                }
                Bytes bytes = new Bytes();
                int count = streamRequest.Read(byteArr, 0, 256);
                while (count > 0)
                {
                    bytes.writeByteArr(Bytes.byteSub(byteArr, 0, count));
                    count = streamRequest.Read(byteArr, 0, 256);
                }
                streamRequest.Close();
                return bytes.getByte;
            }
            catch (Exception eee)
            {
                log.Debug("eee=" + eee.ToString() + eee.Source + eee.StackTrace);
            }
            return null;
        }




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值