生产服务器.net上的间歇性保存问题

时间:2013-09-27 20:54:49

标签: c# asp.net-mvc iis-7.5 windows-server-2012

我们有一个标准表单,可以将模型发布到端点并保存/更新数据库中的数据。在本地,表单每次都有效,并更新模型,从而更新数据库。然而,在生产服务器上,保存是间歇性的,有时它可以工作,有时它不会。当它失败时,页面将重新加载新添加的数据,但在页面的额外GET请求之后,旧数据将再次显示。

我已经在各个点记录了POST数据,即使发送失败,所需的一切也都会被发送到端点。我可以得到我的头脑是为什么有时它会节省,有时它不会。

使用:MS Windows Server 2012,ASP.NET MVC 4,IIS 7.5

相当困在旁边的地方追踪问题?我们将非常感谢您追踪此问题的任何帮助!

以下是相关表格:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <div class="form-row" style="margin-top: 60px;">
        @Html.LabelFor(m => m.FirstName)
        @Html.EditorFor(m => m.FirstName, Model.FirstName)
        @Html.ValidationMessageFor(m => m.FirstName)
    </div>
    <div class="form-row">
        @Html.LabelFor(m => m.LastName)
        @Html.EditorFor(m => m.LastName, Model.LastName)
        @Html.ValidationMessageFor(m => m.LastName)
    </div>
    <div class="form-row">
        @Html.LabelFor(m => m.DateOfBirth)
        @Html.EditorFor(m => m.DateOfBirth, Model.DateOfBirth)
        @Html.ValidationMessageFor(m => m.DateOfBirth)
    </div>
    <div class="form-row bottom-line">
        @Html.LabelFor(m => m.Gender)
        @Html.RadioButtonForEnum(m => m.Gender, "gender-wrapper")
    </div>
    <div class="form-row">
        @Html.LabelFor(m => m.Headline)
        @Html.EditorFor(m => m.Headline, Model.Headline)
        @Html.ValidationMessageFor(m => m.Headline)
    </div>
    <div class="form-row">
        @Html.LabelFor(m => m.Industry)
        @Html.DropDownListFor(m => m.Industry, (SelectList)ViewBag.Industries, new { @class = "industry-select" })
        @Html.ValidationMessageFor(m => m.Industry)
    </div>
    <div class="form-row">
        @Html.LabelFor(m => m.Position)
        @Html.EditorFor(m => m.Position)
    </div>
    <input type="submit" value="save" />
    }

终点:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Settings([ModelBinder(typeof(DateTimeModelBinder))]UserSettingsViewModel model)
{
    var user = userService.LoadUser(User.UserId);
    ViewBag.Industries = new SelectList(userService.GetAllIndustries(), "Name", "Name", user.Industry);

    if (ModelState.IsValid)
    {
        Mapper.Map(model, user);
        userService.UpdateUser(user);
        model = Mapper.Map<User, UserSettingsViewModel>(user);
    }
    else //leave the model intack to correct errors, just set the other tab data
    {
        model.Education = Mapper.Map<IList<UserEducation>, IList<EducationViewModel>>(user.UserEducations.ToList());
        model.Employment = Mapper.Map<IList<UserEmployment>, IList<EmploymentViewModel>>(user.UserEmployments.ToList());
    }
    return View(model);
}

还有一个自定义模型绑定器,用于从日期,月份,年份下拉列表和日期时间类型的自定义编辑器创建日期时间。如果需要也可以显示这些。

1 个答案:

答案 0 :(得分:0)

我认为现在的问题是,您现在遇到了N层系统的问题,但您不知道该问题存在于哪个层级。我要做的第一件事就是在数据库和数据库上启动SQL分析器。在问题发生时运行跟踪。如果您在发生故障时没有看到任何通信,那么这很好,因为您可能已经消除了50%的潜在问题并且可以专注于mvc应用程序。

另一方面,如果数据在所有情况下都被发送到数据库,那么您就知道数据库代码存在问题。