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();

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

求大神指教啊,急啊,当什么都不发的时候,循环多次没有任何问题
...全文
743 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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 那里冒出来的?你的代码完整

17,747

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧