我在挠头, - 我在将大数据上传到WCF服务器时遇到问题。 我看到一篇建议使用异步编程的帖子,因为它忽略了HTTPWebRequest超时。 我看到了几个问题:
我尝试使用flush / without flush / async / sync - 没有解决问题。
我做错了什么?如何从C#将大数据正确地流入服务器? 服务器是RESTful wcf,并配置为允许大数据流。
异步代码是这样的:
HttpWebRequest request = RESTUtils.InitializeRequest(...);
request.SendChunked = true
request.AllowWriteStreamBuffering = false;
using (Stream requestStream = await request.GetRequestStreamAsync())
{
// We will write the stream to the request
byte[] buffer = new byte[UPLOAD_FILE_BUFFER_SIZE];
int read = await i_RequestStream.ReadAsync(buffer, 0, buffer.Length);
while (read > 0)
{
await requestStream.WriteAsync(buffer, 0, read, m_SessionCancellationToken); // nothing happens at server
await requestStream.FlushAsync();
m_SessionCancellationToken.ThrowIfCancellationRequested();
read = await i_RequestStream.ReadAsync(buffer, 0, buffer.Length);
}
}
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) // ONLY here the REST method starts
{
using (Stream responseStream = response.GetResponseStream())
{
actualResult = RESTUtils.StreamReadToEnd(responseStream);
}
}
==更新== 甚至更奇怪的事情发生了 - 我在写入之后立即设置了断点,等待了5分钟,只有这样,服务器得到了请求(即使客户端处于断点。 服务器没有等待客户端完成发送数据(关闭流) - 它只是读取文件中的几KB,然后关闭文件 - 导致服务器中的部分文件。 我不知道我做错了什么