2012-10-03 11 views
8

Un proyecto que se implementó en Azure recientemente comenzó a lanzar dos o tres de estas excepciones al día. Mi investigación muestra que esto a menudo es causado por ensamblajes que tienen sellos de tiempo futuros en ellos, generalmente causados ​​por el despliegue a máquinas en otras zonas horarias (this was a good resource). No hemos tenido este problema antes en el año + que la aplicación ha estado en vivo, y recibe mucho más tráfico de lo que sugerirían las pocas excepciones.ArgumentOutOfRangeException en Azure desde System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate)

Volví a desplegarme con el escritorio remoto habilitado y comprobé las marcas de tiempo de nuestros dlls y el contenido de los directorios \ Windows \ Microsoft.NET y \ Windows \ assembly, y no encontré ninguna marca de tiempo "futura". En este punto, estoy estancado, y estaría agradecido por las ideas.

Seguimiento de la pila:

System.ArgumentOutOfRangeException: especificado argumento estaba fuera del rango de valores válidos. Nombre Parámetro: UTCDate en System.Web.HttpCachePolicy.UtcSetLastModified (DateTime UTCDate) en System.Web.HttpCachePolicy.SetLastModified (fecha DateTime) en System.Web.UI.Page.InitOutputCache (OutputCacheParameters cacheSettings) al sistema. Web.UI.Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) en System.Web.UI.Page.ProcessRequest() en System.Web.UI.Page.ProcessRequest (HttpContext contexto) en System.Web.Mvc. OutputCacheAttribute.OnResultExecuting (ResultExecutingContext filterContext) en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtro IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 cont. ación) en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtro IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 filtros, ActionResult ActionResult) en System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass27.b__24 (IAsyncResult asyncResult) en System.Web.Mvc.AsyncController. <> c__DisplayClass19.b__14 (IAsyncResult asyncResult) en System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) en System.Web.Mvc.AsyncController.EndExecuteCore (IAsyncResult asyncResult) en System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) en System.Web.Mvc.MvcHandler. <> c__DisplayClass6. <> c__DisplayClassb.b__4 (IAsyncResult asyncResult) en System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, Boolean & completedSynchronously)

+0

I' estoy viendo el mismo problema Miré el código System.Web.HttpCachePolicy y System.Web.UI.Page (a través de SSCLI) y vi que esto sería imposible. Esa excepción se produce cuando intenta establecer la fecha de la última modificación en una fecha futura (mayor que DateTime.UtcNow). Esto nunca debería ocurrir ya que el marco usa HttpContext.Timestamp, que está configurado en DateTime.UtcNow al inicio de la solicitud. ¿Una explicación posible puede ser el NTP (sincronización de tiempo) que se activa mientras se procesa la solicitud? –

+0

¿Está almacenando datos en el almacenamiento de tablas? Consulte si Fecha y hora está en el formato correcto con hora UTC. También verifique Convertir Fecha y hora en una cadena y pruébela – user145610

Respuesta

0

Los problemas de la zona horaria son realmente un dolor de cabeza en Azure Environment, por lo que le sugiero que agregue una tarea de inicio y cambie la zona horaria de Azure Environment. No estoy afirmando que esto resolverá su problema, pero no está de más intentarlo ¿verdad? Para cambiar la zona horaria de su entorno de Azure:

1) Guarde tzutil /s "Pacific Standard Time" como .cmd e incluya el archivo en su proyecto.

2) En la pantalla de propiedades del archivo, seleccione "Copiar siempre" como su opción de Copiar a la salida y "Ninguno" como su Acción de compilación.

3) Añadir lo siguiente a su archivo ServiceDefinition:

<Startup> 
    <Task commandLine="nameOfFileYouCreated.cmd" executionContext="elevated" /> 
</Startup> 

4) Y, por supuesto adaptar sus referencias DateTime en su proyecto, usted no tiene que hacer frente a las conversiones etc.

Cuestiones relacionadas