奇怪的HttpWebRequest 在调试的时候返回数据正常,可实际中返回null

aspnet_2012 2014-09-24 08:26:23

private byte[] doPostRequest(string url, byte[] postbs)
{
HttpWebRequest webRequest = null;
HttpWebResponse webResponse = null;
Uri webURL = new Uri(url);
Stream webStream = null;
BinaryReader webReader = null;

byte[] rtnVal = null;
try
{
webRequest = (HttpWebRequest)WebRequest.Create(webURL);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = postbs.Length;


using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(postbs, 0, postbs.Length);
}
webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK)
{
webStream = webResponse.GetResponseStream();
webReader = new BinaryReader(webStream, Encoding.UTF8);
rtnVal = new byte[webResponse.ContentLength];
webReader.Read(rtnVal, 0, rtnVal.Length);
}
}
catch( Exception ex) {
}
finally
{
if (webReader != null) { webReader.Close(); }
if (webStream != null) { webStream.Close(); }
if (webResponse != null) { webResponse.Close(); }
}

return rtnVal;
}


上面这段代码,有时候返回数据正常,在调试的时候一步一步执行都正常,可实际运行就返回null, 感觉像是还没等到webRequest.GetResponse 返回数据就 往后执行了,有什么办法吗?
...全文
420 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyumening 2014-10-01
  • 打赏
  • 举报
回复
引用 8 楼 aspnet_2012 的回复:
回复各位:现在的奇怪问题是 数据是有,webResponse.ContentLength 也是对的,每次都一样,但是不用调试模式或者调试速度快一点返来的 byte[] 里面有很多0 ,我调试慢慢执行又正常了。 这是什么情况啊。。。。
你的意思是说调试慢点又正常了?你在代码中用的是模拟post提交,那个url你有没有办法直接访问在浏览器中预览?如果可以的话看看是不是这个post操作花费的时间太长了,也可以增长超时时间试试
  • 打赏
  • 举报
回复
表示没碰到过这情况- -,顶一下
xdashewan 2014-09-25
  • 打赏
  • 举报
回复
引用 8 楼 aspnet_2012 的回复:
回复各位:现在的奇怪问题是 数据是有,webResponse.ContentLength 也是对的,每次都一样,但是不用调试模式或者调试速度快一点返来的 byte[] 里面有很多0 ,我调试慢慢执行又正常了。 这是什么情况啊。。。。
下个截包工具,看看对方到底发过来什么东西
aspnet_2012 2014-09-25
  • 打赏
  • 举报
回复
回复各位:现在的奇怪问题是 数据是有,webResponse.ContentLength 也是对的,每次都一样,但是不用调试模式或者调试速度快一点返来的 byte[] 里面有很多0 ,我调试慢慢执行又正常了。 这是什么情况啊。。。。
jun471537173 2014-09-25
  • 打赏
  • 举报
回复
if (webResponse.StatusCode == HttpStatusCode.OK) 加个else看下咯,是不是没进if
qzyf1992 2014-09-25
  • 打赏
  • 举报
回复
将请求的超时时间设置长一点
xdashewan 2014-09-25
  • 打赏
  • 举报
回复
代码上看没问题,你需要追加日志,尤其是记录是否有webResponse.StatusCode != HttpStatusCode.OK的场合以及是否有异常抛出
於黾 2014-09-25
  • 打赏
  • 举报
回复
这种通信代码,就不要每次都单步调试了 断点调试,把断点放到read的地方,看走到read的时候有没有数据,webResponse.ContentLength到底是多少
aspnet_2012 2014-09-25
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
你把catch也处理一下,别空着,有可能是抛异常直接到finally中了
我把 catch 写到日志里面了,但是没有异常信息,真是怪了。 我单步调试都正常,可实际就不行。。郁闷啊。
  • 打赏
  • 举报
回复
程序中绝不推荐写空的catch,除非你非常清楚,否则还不如不要catch
  • 打赏
  • 举报
回复
你把catch也处理一下,别空着,有可能是抛异常直接到finally中了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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