Медленный ответ для возврата файла с помощью контроллера FileResult?
Я пытаюсь создать приложение для тестирования скорости для наших клиентов, подключающихся к нашим электронным лабораториям. Я хочу проверить их скорость загрузки в Мбит / с.
Логика, которую я придумал, такова; после события click запустите startTime, сделайте ajax-вызов к контроллеру FileResult, чтобы вернуть jpg-файл объемом 2,67 Мб обратно клиенту. После "успеха" запишите endTime, вычтите две метки времени, затем вызовите другой контроллер, чтобы завершить некоторую логику и записать результаты в базу данных, где я затем возвращаю представление, чтобы показать результаты.
Я размещаюсь на сервере Azure Db в регионе, где я живу. Мои результаты - 1 Мбит / с, что кажется медленным по сравнению с speedtest.net, где я получаю 15 Мбит / с, выбирая сервер в том же регионе.
Мне интересно, если этот подход не работает? Я до сих пор работаю над основами, так что попытки отлова и т. Д. Не реализованы.
Сценарий на моей странице:
<script>
$(document).ready(function () {
$("#downloadFile").click(function () {
var start = Date.now();
var end = null;
var totalSeconds = 0.00;
$.ajax({
url: "/Home/DownloadTest",
success: function (data) {
end = Date.now();
//alert(start + " " + end);
totalSeconds = (end - start) / 1000;
window.location.href = "/Home/DownloadResults?totalSeconds="+totalSeconds;
}
});
});
});
</script>
Контроллер FileResult
//Download File
public FileResult DownloadTest()
{
string directoryPath = Server.MapPath("~/TestFile/2point67mb.jpg");
string fileName = "DownloadTest.jpg";
return File(directoryPath, "image/jpeg", fileName);
}
Контроллер представления
//Download Results
public ActionResult DownloadResults(string totalSeconds)
{
double totalSecs = Convert.ToDouble(totalSeconds);
SpeedTest Test = new SpeedTest();
Services.IPAddress ip = new Services.IPAddress();
var clientIP = ip.GetIPAddress();
string[] IPAddresses = clientIP.Split(':');
Test.Address = IPAddresses[0];
double fileSize = 2.67; //Size of File in MB.
double speed = 0.00;
speed = Math.Round(fileSize / totalSecs);
Test.ResponseTime = string.Format("{0} Mbps", speed);
Test.Status = "Success";
Test.UserId = User.Identity.GetUserId();
Test.TestDate = DateTime.Now;
db.SpeedTest.Add(Test);
db.SaveChanges();
return View(Test);
}