2013-12-09 2 views
1

Имея странную проблему сегодня. Мне удалось устранить другие проблемы. Моя страница ASP содержит элементы управления NO (поэтому нет пустого URL-адреса, который может вызвать проблему). Сама программа, из кода VB позади, получает двоичные данные из базы данных и делает Response.BinaryWrite (imagedata) на странице. Когда я запускаю его в Chrome или Firefox, все работает отлично. Когда я запускаю IE, после того, как мой код завершит выполнение, он снова запустит Page_Init снова и Page_Load, как будто загружается в первый раз снова и снова. Значение обратной передачи всегда ложно, поэтому вокруг него нет никакого способа. Здесь нет кода жереха (как вы можете видеть, ничего интересного) ...Page_Init и Page_Load выполняет дважды ASP и VB.NET только в IE .. почему?

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="pagenamehere.aspx.vb" Inherits="x.x.x.x.y" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title>Test</title> 
</head> 

<body> 
</body> 
</html> 

И Page_Init и подпись Page_Load является

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
'checks database connection string and handles error if there is one 
End Sub 

Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
'checks user is authenticated to view the image and if so, does the binarywrite 
End Sub 

Я попытался изменить autoeventwriteup к истине и с с ручками Me.Load и т. д., но без эффекта. Я также пробовал проверять объект Sender, но при первом переходе страницы и нежелательном втором загрузке страницы ничего не меняется.

Наконец, страница загружается во второй раз сразу после следующего кода

   Response.Clear() 
       Response.ClearContent() 
       Response.ClearHeaders() 
       Response.Buffer = True 
       Response.ContentType = "image/vnd.djvu" 
       Response.AddHeader("Content-Disposition", "inline;filename=temp.djvu") 
       Response.Cache.SetCacheability(HttpCacheability.NoCache) 
       Response.BinaryWrite(imagedata) 
       Response.Flush() 
       Response.Close() 

Сразу после Response.Close будет вернуться к Page_Init. Я попробовал response.end, но это не имеет значения. Я попытался удалить заголовок, информацию о кеше и т. Д., Но не повезло. Пожалуйста помоги!

Благодаря

+0

Может быть это вызывает проблемы http://www.sitepoint.com/ie-contype-request/ – jbl

+0

попробуйте запустить скрипач и убедитесь, что из-за аутентификации страница дважды вызывается. Если это не аутентификация, тогда вы по-прежнему узнаете, почему сделан второй запрос «get» – NoviceProgrammer

+0

@jbl. Я считаю, что вы можете что-то сказать. У меня теперь есть временное исправление, выполняя следующие действия: 1) каждый раз проверяя содержимое заголовков. При первом запуске кода 7, во второй раз, когда код работает, есть 6. Тот, который исчезает во второй раз, является «Accept-Language».2) Получите счетчик заголовков (7), и если он меньше 7, то это второй раз, когда код запускается 3) только записывать в журнал базы данных, если headers.keys.count <7. Проблема теперь в том, что я хочу улучшить код и сделать его менее жестко закодированным. Пожалуйста, посоветуйте далее пример vb.net, если это возможно? спасибо! – user2965112

ответ

0

Вы действительно не должны использовать Response.Close подобные *. Это действительно только для protecting against attacks or other error-type conditions:

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

Вы можете использовать этот метод в ответ на атаку злоумышленника HTTP . Однако обычно вы должны вызывать CompleteRequest, если хотите перейти к событию EndRequest и отправить ответ на вопрос .

И это вызовет очень похожие проблемы с тем, который вы описываете (поскольку он отправляет клиенту запрос «сбросить»). Попробуйте обновить свой код, чтобы вместо этого использовать Response.CompleteRequest, и это должно (возможно) решить ваши проблемы с несколькими запросами.

* Смотрите этот блог для углубленного анализа того, почему: Response.End, Response.Close, and How Customer Feedback Helps Us Improve MSDN Documentation

+0

Мой плохой, я цитировал ранее документа «Response.End». Но тот же совет по-прежнему применяется. – jadarnel27

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