HttpWebRequest使用总结

HttpWebRequest的KeepAlive默认是true,如果使用的时候仅仅只是关闭流,不关闭网卡上的通道的话,第二个请求在TCP没有关闭的情况下是走同一个通道,此时本机的TCP通道就会抛异常出来,这是本机抛的错误。所以除了关闭本机的IO资源外,还要关闭网络资源。需要把KeepAlive设置成false就可以了。TCP通信结束后会自动关闭该请求所使用的通道。
request.About() 是发现异常就断掉
http是上层协议,底层还是走tcp的,如果不关闭的话,第二个http会默认走没有关闭的tcp。如果有并发的时候,数据就乱了。所以应该及时关闭tcp,每次开一个新端口。 

public string PostToHttpService(string url, string jsonData, string userName, string password)

        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.Credentials = new NetworkCredential(userName, password);
            request.Timeout = 180000;//两分钟
            request.ReadWriteTimeout = 180000;//两分钟
            request.KeepAlive = false;
            byte[] datas = Encoding.UTF8.GetBytes(jsonData);
            request.ContentLength = datas.Length;

            try
            {
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(datas, 0, datas.Length);
                requestStream.Close();
            }
            catch (System.Net.ProtocolViolationException ex)
            {
                request.Abort();
            }
            catch (System.Net.WebException ex)
            {
                request.Abort();
            }
            catch (System.ObjectDisposedException ex)
            {
                request.Abort();
            }
            catch (System.InvalidOperationException ex)
            {
                request.Abort();
            }
            catch (System.NotSupportedException ex)
            {
                request.Abort();
            }


            HttpWebResponse response = null;
            string responseDatas = string.Empty;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                Stream streamResponse = response.GetResponseStream();
                using (StreamReader sr = new StreamReader(streamResponse))
                {
                    responseDatas = sr.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                request.Abort();
            }
            finally
            {
                if (response != null)
                {
                    try
                    {
                        response.Close();
                    }
                    catch {
                        request.Abort();
                    }
                }
            }
            return responseDatas;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值