HttpWebRequest发送post请求问题

wuxiao' 拍拍贷 开发组长/高级工程师/技术专家  2014-01-09 05:03:02
HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
//请求方式
request.Method = "POST";
//超时时间
//request.Timeout = 300000;
request.ContentType = "text/xml";
byte[] payload = Encoding.UTF8.GetBytes(message);
request.ContentLength = payload.Length;
//获得请求流
writer = request.GetRequestStream();
////将请求参数写入流
writer.Write(payload, 0, payload.Length);

//关闭请求流
writer.Flush();
writer.Close();

reader = new StreamReader(response.GetResponseStream());
string responseData = reader.ReadToEnd();
response.Close();
reader.Close();

代码如上所示,当我循环执行多次这个代码时,导致连接无法释放
查看端口效果如下:

求大神指教啊,急啊,当什么都不发的时候,循环多次没有任何问题
...全文
426 点赞 收藏 8
写回复
8 条回复
wuxiao' 2014年01月16日
问题已经解决,并非.net客户端问题,而是服务端读数据问题导致,谢谢大家的回复
回复 点赞
wuxiao' 2014年01月14日
自己顶起,难道大家都没遇到过?不可思议啊...
回复 点赞
wuxiao' 2014年01月10日
引用 5 楼 WM_JAWIN 的回复:
改三楼的,也许这样就可以了
 private static string Proc(string url, string postData)
        {
            HttpWebRequest request = CreateRequest(url, postData);
            using( HttpWebResponse response = (HttpWebResponse)request.GetResponse()){
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), m_Encoding))
            {
                string reHtml = reader.ReadToEnd();
                reader.Close();
                return reHtml;
            }
        }}
没有效果,仍然会阻塞端口,出现等待状态
回复 点赞
WM_JAWIN 2014年01月10日
改三楼的,也许这样就可以了
 private static string Proc(string url, string postData)
        {
            HttpWebRequest request = CreateRequest(url, postData);
            using( HttpWebResponse response = (HttpWebResponse)request.GetResponse()){
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), m_Encoding))
            {
                string reHtml = reader.ReadToEnd();
                reader.Close();
                return reHtml;
            }
        }}
回复 点赞
wuxiao' 2014年01月10日
感谢3楼wyd1520的回复,但是你的代码效果和我写的一样,仍然存在那个问题。。
回复 点赞
本拉灯 2014年01月09日
引用 楼主 wushifanwuxiao 的回复:
HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest; //请求方式 request.Method = "POST"; //超时时间 //request.Timeout = 300000; request.ContentType = "text/xml"; byte[] payload = Encoding.UTF8.GetBytes(message); request.ContentLength = payload.Length; //获得请求流 writer = request.GetRequestStream(); ////将请求参数写入流 writer.Write(payload, 0, payload.Length); //关闭请求流 writer.Flush(); writer.Close(); reader = new StreamReader(response.GetResponseStream()); string responseData = reader.ReadToEnd(); response.Close(); reader.Close(); 代码如上所示,当我循环执行多次这个代码时,导致连接无法释放 查看端口效果如下: 求大神指教啊,急啊,当什么都不发的时候,循环多次没有任何问题
给你 用我写的完整的

 public class Http
    {
        static Encoding m_Encoding = Encoding.Default;

        public static string Get(string url)
        {
            return Proc(url, string.Empty);
        }



        public static string Post(string url, string data)
        {
            return Proc(url, data);
        }


        public static string Get(string url, List<NameValue> nameValues)
        {

            if (nameValues != null && nameValues.Count > 0)
            {
                string data = string.Join("&", nameValues.Select(o => string.Format("{0}={1}", o.Name, o.Value)).ToArray());
                url = string.Format("{0}?{1}", url, data);
            }
            return Get(url);
        }

        public static string Post(string url, List<NameValue> nameValues)
        {
            string data = string.Empty;
            if (nameValues != null && nameValues.Count > 0)
            {
                data = string.Join("&", nameValues.Select(o => string.Format("{0}={1}", o.Name, o.Value)).ToArray());
            }
            return Post(url, data);
        }

        private static HttpWebRequest CreateRequest(string url, string postData)
        {
            HttpWebRequest request = null;
            request = (HttpWebRequest)WebRequest.Create(url);
            request.Accept = "*/*";
            request.ProtocolVersion = HttpVersion.Version11;
            request.AllowAutoRedirect = true;
            request.Timeout = 1000 * 30;
            request.KeepAlive = true;
            if (!string.IsNullOrEmpty(postData))
            {
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                byte[] bytes = m_Encoding.GetBytes(postData);
                request.ContentLength = bytes.Length;
                Stream requestStream = null;
                try
                {
                    requestStream = request.GetRequestStream();
                    requestStream.Write(bytes, 0, bytes.Length);
                }
                catch (Exception exception)
                {

                }
                finally
                {
                    if (requestStream != null)
                    {
                        requestStream.Close();
                    }
                }
            }
            return request;
        }


        private static string Proc(string url, string postData)
        {
            HttpWebRequest request = CreateRequest(url, postData);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), m_Encoding))
            {
                string reHtml = reader.ReadToEnd();
                reader.Close();
                return reHtml;
            }
        }
    }

    public class NameValue
    {
        public NameValue(string name, string value)
        {
            this.Name = name;
            this.Value = value;
        }
        public string Name { get; set; }
        public string Value { get; set; }
    }


DEMO

            List<NameValue> list = new List<NameValue>();
            list.Add(new NameValue("AreaID", macInfo.AreaID));
            list.Add(new NameValue("Code", macInfo.Code));
            list.Add(new NameValue("SortIndex", (macInfo.Index + 1).ToString()));
            list.Add(new NameValue("Table", table));
            list.Add(new NameValue("Slot", slot));
            list.Add(new NameValue("SubSlot", subSlot));
            list.Add(new NameValue("Lane", lane));

 Http.Post(url,list)就是了

记得记点结贴呀。
回复 点赞
wuxiao' 2014年01月09日
引用 1 楼 WM_JAWIN 的回复:
response 那里冒出来的?你的代码完整
HttpWebResponse response = null;是有的,在外面,其实这是标准的发送和接收代码,不知道大家有没有遇到这个问题。。。
回复 点赞
WM_JAWIN 2014年01月09日
response 那里冒出来的?你的代码完整
回复 点赞
发动态
发帖子
.NET Framework
创建于2007-09-28

1.6w+

社区成员

2.4w+

社区内容

.NET技术 .NET Framework
社区公告
暂无公告