У нас есть приложение .NET 2.0 WinForms, которое должно загружать файлы на сервер IIS6 через WebDav. Время от времени мы получаем жалобы от удаленного офиса, что они получают одно из следующих сообщений об ошибках
- Базовое соединение было закрыто:
при отправке произошла непредвиденная ошибка.
- Базовое соединение было закрыто:
неожиданная ошибка произошла на
получить.
Это, кажется, происходит только с большими файлами (~ 20 МБ плюс). Я проверил его с помощью файла размером 40 МБ со своего домашнего компьютера и попытался поместить в спящий режим «Sleep's», чтобы симулировать медленное соединение, поэтому я подозреваю, что это связано с проблемами сети в их конце ... но
- ИТ в удаленном офисе не помогают
- Я бы хотел исключить вероятность того, что мой код ошибочен.
Итак - кто-нибудь может заметить какие-либо ошибки или предложить какие-либо обходные пути, которые могут «пуленепробиваемым» кодом против этой проблемы. Спасибо за любую помощь. Вырубленная версия кода выглядит следующим образом:
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;
}