最後にレポートを生成するウィザード UI である asp.net 4.5 アプリケーションがあります。MVC Futures プラグインを使用して、モデルをシリアル化し、フォーム間で渡します。最後までクリックして、レポートを生成できます。また、F5 キーを押して更新すると、前のリクエストからフォーム データが再送信され、フォームがリロードされます。
私の問題は、レポートを再生成する代わりに、ページで F5 を再度押しようとすると、通常は数分待った後、次のエラーが表示されることがあります。
SerializationException: 逆シリアル化に失敗しました。
どうやらブラウザが前回のリクエストを忘れてしまい、フォームを再送信せずにページを更新しようとしているようです。何が起こっているかについてのアイデアはありますか?フォームをすぐに再送信し、数分待ってからもう一度送信し、Fiddler を使用して毎回何が投稿されるかを確認することで、この問題を再現しようとします。
ここで何が問題になる可能性があるかについて、誰か考えがありますか?
更新 (2014 年 1 月 3 日):
レポートを生成する post メソッドは次のとおりです。
[HttpPost]
public ActionResult GenerateReport([Deserialize] WizardModel wizardModel, string providerId = null, string providerName = null)
{
var model = new ReportModel();
if (!String.IsNullOrEmpty(providerId))
{
wizardModel.Providers = new List<NameValue>(){ new NameValue() { Name = providerName, Value = providerId }};
model.AutoPrint = true;
}
var param = new MeasureParams()
{
Key = wizardModel.CriteriaKeys.ToArray(),
ProviderIds = (wizardModel.Providers != null ? wizardModel.Providers.Select(x => x.Value).ToArray() : null),
StartDate = (wizardModel.StartDate),
StartDateAsString = (wizardModel.StartDate).ToString(),
EndDate = (wizardModel.EndDate),
EndDateAsString = (wizardModel.EndDate).ToString()
};
var results = _measureService.CalculateMeasures(param);
model.WizardModel = wizardModel;
model.Results = new List<List<ResultsModel>>();
model.Results.AddRange(MeasureResultsMapper.MapMeasurementsResultToHierarchicalList(results));
if (wizardModel.IsDetailedReport)
{
return View("DetailedReport", model);
}
return View("SummaryReport", model);
}
ビューページ自体には特別なことは何もありません。シリアル化されたオブジェクトさえありません。以前のレビューページにありました。そのページの一部を投稿できます:
@{ Html.BeginForm("GenerateReport", "Wizard", FormMethod.Post, new {id = "reviewForm"});}
@Html.Serialize("wizardModel", Model)
@{Html.EndForm();}
完全なスタック トレース:
「/」アプリケーションでサーバー エラーが発生しました。
オブジェクト参照がオブジェクト インスタンスに設定されていません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
ソース エラー: 現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。] System.Web.Security.MachineKey.Decode(String encodedData, MachineKeyProtection protectionOption) +268 Microsoft.Web.Mvc.MachineKeyWrapper.Decode(String encodedData, MachineKeyProtection protectionOption) + 41 Microsoft.Web.Mvc.MvcSerializer.Deserialize (文字列 serializedValue、SerializationMode モード、IMachineKey machineKey) +175
[SerializationException: 逆シリアル化に失敗しました。データがシリアライズされたのと同じ SerializationMode を使用してデシリアライズされていることを確認します。それ以外の場合は、内部例外を参照してください。 Mvc.DeserializingModelBinder.BindModel(ControllerContext controllerContext、ModelBindingContext bindingContext) +293 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext、ParameterDescriptor parameterDescriptor) +317 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext、ActionDescriptor actionDescriptor) +117 System.Web.Mvc.Async.<DisplayClass25.b _1e(AsyncCallback asyncCallback、オブジェクト asyncState) +446 System.Web.Mvc.Async.WrappedAsyncResult 1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30
System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(AsyncCallback コールバック、オブジェクト状態、Int32 タイムアウト) +130 System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback コールバック、オブジェクトの状態) +381 System.Web.Mvc.Async.WrappedAsyncResult1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
System.Web.Mvc.Async.WrappedAsyncResult
1.Begin(AsyncCallback コールバック、オブジェクト状態、Int32 タイムアウト) +130 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext、AsyncCallback コールバック、オブジェクト状態) +249 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext、AsyncCallbackコールバック、オブジェクト状態) +49 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext コンテキスト、AsyncCallback cb、オブジェクト extraData) +16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute( ) +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ、ブール値& completedSynchronously) +155