【发布时间】:2010-10-18 13:51:08
【问题描述】:
我们有一个 .NET 2.0 WinForms 应用程序,它需要通过 WebDav 将文件上传到 IIS6 服务器。我们不时收到来自远程办公室的投诉,称他们收到以下错误消息之一
- 基础连接已关闭: 发送时发生意外错误。
- 基础连接已关闭: 发生意外错误 接收。
这似乎只发生在大文件(约 20Mb 以上)中。我已经使用家用计算机上的 40Mb 文件对其进行了测试,并尝试将“睡眠”置于循环中以模拟慢速连接,因此我怀疑它最终归结为网络问题......但是
- 远程办公室的 IT 无济于事
- 我想排除我的代码有问题的可能性。
所以 - 任何人都可以发现任何错误或建议任何可能“防弹”代码针对此问题的解决方法。谢谢你的帮助。删减版代码如下:
public bool UploadFile(string localFile, string uploadUrl)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl);
try
{
req.Method = "PUT";
req.AllowWriteStreamBuffering = true;
req.UseDefaultCredentials = Program.WebService.UseDefaultCredentials;
req.Credentials = Program.WebService.Credentials;
req.SendChunked = false;
req.KeepAlive = true;
Stream reqStream = req.GetRequestStream();
FileStream rdr = new FileStream(localFile, FileMode.Open, FileAccess.Read);
byte[] inData = new byte[4096];
int bytesRead = rdr.Read(inData, 0, inData.Length);
while (bytesRead > 0)
{
reqStream.Write(inData, 0, bytesRead);
bytesRead = rdr.Read(inData, 0, inData.Length);
}
reqStream.Close();
rdr.Close();
System.Net.HttpWebResponse response = (HttpWebResponse)req.GetResponse();
if (response.StatusCode != HttpStatusCode.OK && response.StatusCode!=HttpStatusCode.Created)
{
MessageBox.Show("Couldn't upload file");
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
return true;
}
【问题讨论】:
-
什么webdav客户端和服务器?
标签: c# networking