У меня иногда бывают двойные веб-запросы (без двойных кликов).Может кто-нибудь сказать мне, что вызывает их, чтобы я мог предотвратить их?
исходная ситуация:
Это приложение .Net 3.5 C #, работающее в IIS7.Нет Asp.Net с ViewState.Просто PageHandlers с преобразованиями Xml / Xslt.Код очень старый.Эта проблема только появилась неожиданно некоторое время назад.Мы отправляем туда электронные письма, и вот как это появилось.Иногда мы внезапно получали две почты вместо одной.
Мои наблюдения пока:
Это случается редко, но тем не менее иногда.Видимо случайный.Отправленные байты в первом запросе равны 0, но они не являются двойными кликерами.HttpContext.Current.Response.IsClientConnected верен.
Мои предположения пока:
Кажется, что-то идет не так в SessionHandling (через Sql-Server), и этоповторно открывает запрос?
Журнал IIS:
2012-03-02 08:16:43 W3SVC9026 [Сервер] [IP-адрес сервера] POST [Внутренний URL-адрес] - 80 - [IP-адрес клиента] HTTP/1.1 Mozilla / 4.0 + (совместимо; + MSIE + 8.0; + Windows + NT + 5.1; + Trident / 4.0; + AskTbORJ / 5.14.1.20007) ASP.NET_SessionId = [Идентификатор сеанса] [Абсолютный URL] [Имя хоста] 2000 64 0 899 937
2012-03-02 08:16:43 W3SVC9026 [Сервер] [IP-адрес сервера] POST [внутренний URL-адрес] - 80 - [IP-адрес клиента] HTTP / 1.1 Mozilla / 4.0 + (совместимо; + MSIE + 8,0; + Windows + NT + 5.1; + Trident / 4.0; + AskTbORJ / 5.14.1.20007) ASP.NET_SessionId = [Идентификатор сеанса] [Абсолютный URL] [Имя хоста] 200 0 0 45888 923 1343
StackTrace:
08: 16: 43 Обычный запрос (все обычные запросы, которые выполняются только один раз, тоже выглядят так)
в System.Environment.get_StackTrace ()в [MyPageHandler.ProcessRequest (HttpContext httpContext) и т. д.]в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute ()в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершен синхронно)в System.Web.HttpApplication.ApplicationStepManager.ResumeSteps (ошибка исключения)в System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCallback cb, Object extraData)в System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr)в System.Web.HttpRuntime.ProcessRequestNoDemand (HttpWorkerRequest wr)в System.Web.Hosting.ISAPIRuntime.ProcessRequest (EcP IntPtr, iWRType Int32)
08: 16: 44 Дополнительный запрос
в System.Environment.get_StackTrace ()в [MyPageHandler.ProcessRequest (HttpContext httpContext) и т. д.]в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute ()в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершен синхронно)в System.Web.HttpApplication.ApplicationStepManager.ResumeSteps (ошибка исключения)в System.Web.HttpApplication.ResumeStepsFromThreadPoolThread (ошибка исключения)в System.Web.HttpApplication.AsyncEventExecutionStep.ResumeStepsWithAssert (ошибка исключения)в System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion (IAsyncResult ar)в System.Web.HttpAsyncResult.Complete (логическое синхронное, результат объекта, ошибка исключения, статус RequestNotificationStatus)в System.Web.SessionState.SessionStateModule.PollLockedSessionCallback (состояние объекта)в System.Threading.ExecutionContext.runTryCode (объект userData)в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (код TryCode, код возврата CleanupCode, объект userData объекта)в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)в System.Threading._TimerCallback.PerformTimerCallback (состояние объекта)