谁知道C#使用HttpWebRequest的POST方法发送大量数据的方法?

sytzz 2010-08-08 08:09:33
【平台】
C#,WinForm,win32窗口应用程序

【问题描述】
例子是上传文件。小文件可以成功,大文件发送时,会出现
The request was aborted: The request was canceled的异常。
哪位大哥知道原因是什么呀?我卡在这里很久了…
是不是没有调用另一个线程的原因?我直接写的代码,所以在上传的时候页面会卡住,但是用WPE抓包在页面卡住的时候也是正常的,但是出现异常之后就没有数据包了。
或者可能是服务器有超时,而我没有申请延时?(不知道有没有这种机制)
对于文件的上传,我的代码是这样的


buffer = new byte[BUFFER_LENTH];
int readCount;

//发送文件数据
do
{
readCount = fileStream.Read(buffer, 0, BUFFER_LENTH);
newStream.Write(buffer, 0, readCount);
//Thread.Sleep(100);
} while (readCount > 0);


我担心是数据发送过快导致服务器数据堆积,因此试过Sleep,值试过10和100,发送失败,而且设置成100时,发送的数据包数目还比设置成10的要小。所以我觉得是不是服务器在接收到HTTP头的时候会开始计时,时间到了之后如果数据还没发完就自动断开连接。

我也试过改变BUFFER_LENTH的值来发送数据,之前是32768,失败,然后设置65536,失败,然后1024,128都试过,都失败……

谢谢大侠们的指教啦!

...全文
466 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sytzz 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cloudhsu 的回复:]
是因为档案传太久所以失败吗?
如果是的话, ReadWriteTimeout 这个属性改长一点?
预设是五分钟
[/Quote]

呵呵,问题解决啦~~~
真的很感谢你。
不过不是设置ReadWriteTimeout,是设置Timeout这个属性~
单独用前一个设置无效,单独用后一个设置成功。
还是很谢谢你!!呵呵,至少给我指出了方向~
sytzz 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cloudhsu 的回复:]
是因为档案传太久所以失败吗?
如果是的话, ReadWriteTimeout 这个属性改长一点?
预设是五分钟
[/Quote]
我试过了把它设置成300,就是300毫秒。但是还是发送了2~3M就停止了。如果这个设置有用的话,应该会很快停止的吧?
我再试试设置成3000秒。
云瑀 2010-08-08
  • 打赏
  • 举报
回复
是因为档案传太久所以失败吗?
如果是的话, ReadWriteTimeout 这个属性改长一点?
预设是五分钟

110,476

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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