问题描述
小弟刚接触Json数据请求,最近用winform写一个桌面应用程序用到这方面的东西。然后先写了get,post方法,都没有问题;写到delete,发现连接在第二次delete之后,再GET数据的时候连接直接断掉。MSDN了一下,说方法里面只能有GET和POST,但是为什么我第一次DELETE是成功的?我很不能理解。忘大神指点迷津,是不是我哪里参数没设置?还是哪里资源没释放干净。下面贴一下我GET,POST和DELETE的代码。//这里是GET的方法namespaceClient100{classGetInformation{publicstaticstringGetstr;publicstaticstringaddress;publicstringGetHTTPInfo(){stringurlPath="http://"+IP.ip+"/api/v2/";urlPath+=address;intmillisecond=30000;WebResponseresponse=null;StreamReaderreader=null;try{HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(urlPath);request.Proxy=null;//关闭代理(重要)request.Timeout=millisecond;request.Method="GET";request.Accept="application/json";request.ContentType="application/json";request.ServicePoint.Expect100Continue=false;response=(WebResponse)request.GetResponse();reader=newStreamReader(response.GetResponseStream());Getstr=reader.ReadToEnd();//response.Close();//reader.Close();//request.Abort();}catch(Exceptionex){MessageBox.Show(ex.ToString());Getstr="";}returnGetstr;}}}//这里是POST方法namespaceClient100{publicclassPostTables{publicstaticstringPostHttp(string[]tableIds){HttpWebResponsehttpWebResponse=null;StreamReaderstreamReader=null;try{stringurl="http://"+IP.ip+"/api/v2/consumptions";HttpWebRequesthttpWebRequest=(HttpWebRequest)WebRequest.Create(url);Consumptioncp=newConsumption();intcount=tableIds.Count();cp.tables=newTable[count];for(inti=0;i<count;i++){cp.tables[i]=newTable();cp.tables[i].id=tableIds[i];}cp.people=12;httpWebRequest.Proxy=null;httpWebRequest.ContentType="application/json";httpWebRequest.Accept="application/json";httpWebRequest.Method="POST";httpWebRequest.Timeout=30000;byte[]btBodys=Encoding.UTF8.GetBytes(Serialize(cp));httpWebRequest.ContentLength=btBodys.Length;//httpWebRequest.KeepAlive=false;httpWebRequest.ServicePoint.Expect100Continue=false;httpWebRequest.GetRequestStream().Write(btBodys,0,btBodys.Length);httpWebResponse=(HttpWebResponse)httpWebRequest.GetResponse();streamReader=newStreamReader(httpWebResponse.GetResponseStream());stringresponseContent=streamReader.ReadToEnd();returnresponseContent;}catch(Exceptionex){ex.ToString();returnnull;}}publicstaticstringSerialize(objecto){System.Text.StringBuildersb=newSystem.Text.StringBuilder();System.Web.Script.Serialization.JavaScriptSerializerjson=newSystem.Web.Script.Serialization.JavaScriptSerializer();json.Serialize(o,sb);returnsb.ToString();}}}//这里是DELETE方法namespaceClient100{classDeleteTables{publicstaticstringstr;publicstaticHttpWebRequestrequest;publicstaticstringDeleteHttp(stringid){stringurlPath="http://"+IP.ip+"/api/v2/consumptions/";urlPath=urlPath+id;intmillisecond=30000;WebResponseresponse=null;StreamReaderreader=null;try{request=(HttpWebRequest)WebRequest.Create(urlPath);//request.Proxy=null;//关闭代理(重要)request.Timeout=millisecond;request.Method="DELETE";//request.Accept="application/json";//request.ContentType="application/json";request.ServicePoint.Expect100Continue=false;response=(WebResponse)request.GetResponse();reader=newStreamReader(response.GetResponseStream());str=reader.ReadToEnd();}catch(Exceptionex){MessageBox.Show(ex.ToString());str="";}returnstr;}}}
解决方案
解决方案二:
什么叫第二次get的时候连接直接断掉?
解决方案三:
文件都被你删除了,再get出问题不挺正常的?
解决方案四:
你是做点菜系统的吧
解决方案五:
看到Table了好像是桌子操作~~
解决方案六:
问题已经解决,response没释放,连接一直存在。释放掉就好了。
解决方案七:
不仅仅是“释放”的问题。你如果遇到过“并发访问”说明你至今还只是接触过一些过“小”的程序。不要滥用static。这就是一例。
解决方案八:
你如果遇到过“并发访问”说明你--->你如果还没有遇到过“并发访问”说明你
解决方案九:
@sp1234多谢大神提醒,小弟接触程序时间尚短,没做过什么大项目,以后还要多向你学习