2016-10-17 13 views
0

У меня есть веб-сайт, который позволяет пользователям загружать файлы с помощью ссылок href, которые будут вызывать запрос HTTP GET и возвращать файл (подскажут пользователя в IE и автоматически -Скачать в хроме)Выполнение второго запроса HTTP (до первого конца) закрывает соединение с первым

 public async Task<IActionResult> DownloadFile(DocumentFile file){ 
      fileName = DocumentTask.RetrieveFiles(new string[1] { file.FileID }, file.Facility, UserData.Access).SingleOrDefault(); 
      if (System.IO.File.Exists(fileName)) 
      { 
       FileInfo info = new FileInfo(fileName); 
       return File(System.IO.File.ReadAllBytes(fileName), FileUtility.GetContentType(fileName), info.Name); 
      } 
     } 

Когда пользователь нажимает на ссылку скачать:

<a href="/File/DownloadFile?FileUID=1111&amp;Facility=TestFacility&amp;Name=TestFile.pdf"><i class="file pdf outline icon"></i>TestFile.pdf</a> 

и не сразу после того, как щелчки другой ссылки на скачивание (до первой загрузки ссылки вернулся ответ) он появляется клиент закрывает соединение с первым запросом. Он выдаст эту ошибку:

Удаленный хост закрыл соединение. Код ошибки: 0x800703E3.

Эта ошибка возникает, когда сервер пытается вернуть файл пользователю, но это невозможно, поскольку соединение было закрыто.

Используя инструменты разработчика Chrome, я вижу, что оба запроса попадают в очередь, но как только второй запрос отправляется, он отменяет первый запрос (закрывая соединение).

Chrome Developer Request Cancelled

Сейчас я отключил пользователь нажав другую ссылку для загрузки, пока предыдущий запрос не вернулось, однако я хотел бы знать, если есть более элегантное решение для обеспечения нескольких запросов, которые будут отправлены и ждал для?

(я проверил это в Chrome и IE 11 и оба отменить предыдущий запрос, отправленный)

Спасибо заранее.

+0

Ваш клиент повторно использует один и тот же объект (XMLHttpRequest)? если вы это сделаете, проблема в том, что вы фактически отбрасываете предыдущий запрос. Если я ошибаюсь, было бы хорошо видеть код вашего клиента. –

+0

@ Ronny-Barrera. Пожалуйста, посмотрите мое изменение выше для клиентского кода, это просто ссылка HREF, которая вызывает метод контроллера для возврата файла клиенту. Он не использует XMLHttpRequest. Запросы отправляются как запросы типа документа. –

+0

Я боюсь, что у меня не было времени попробовать это раньше, но не помогло бы вам, если бы вы просто добавили в свою папку свой файл или жесткую ссылку, чтобы вы могли обойти запрос на обслуживание? –

ответ

0

Мне не удалось найти ответ на мое решение. Однако я смог изменить способ работы моих ссылок. Изменив ссылки target = "_ blank", он откроет новую страницу и закроется, когда файл начнет загружаться. Это останавливает пользователя от выбора второй ссылки до тех пор, пока другая не вернется, но также если они используют среднюю кнопку мыши, чтобы открыть ссылку, но не изменить фокус вкладки, это останавливает ошибку. Я думаю, что проблема с несколькими запросами с одной и той же вкладки.

0

Может быть, вы могли бы использовать функцию с формой следующего, чтобы достичь вашей Цель СССР, я проверил это, и это не останавливает receving файлы, дайте мне знать, если это работает для вас:

public Stream Downloadfile(string filename) 
     { 
      WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=" + filename; 
      WebOperationContext.Current.OutgoingResponse.ContentType = "application/octet-stream"; 
      return File.OpenRead(filename); 
     } 
+0

Позвольте пояснить. Проблема не на стороне сервера.Серверный код работает без проблем, однако, когда он пытается вернуть файл обратно пользователю, соединение больше не доступно, потому что соединение было отменено на стороне клиента. Мне интересно, есть ли параметр, который останавливает одновременное подключение нескольких запросов. –

 Смежные вопросы

  • Нет связанных вопросов^_^