【问题标题】:How do I diagnose why an asp.net MVC site works on one server but not another?如何诊断为什么 asp.net MVC 站点可以在一台服务器上运行,但不能在另一台服务器上运行?
【发布时间】:2016-01-11 12:01:59
【问题描述】:

我有一个带有 Razor 站点的 asp.net MVC,它在我的 PC 和我们公司的测试服务器上运行良好。但是,在客户端的 Web 服务器上,它会“卡在”登录页面上。我无法在客户端服务器上调试站点(他们没有 Visual Studio),也无法在其他任何地方复制该问题。关于如何找到问题的任何建议?另外,您知道可能是什么问题吗?

所以我有一个登录页面,用户在其中输入他们的用户名和密码,然后单击“登录”提交按钮。当他们点击提交时,浏览器会“卡住”;那是“工作”图标旋转(我使用的是 Chrome),而在页面底部它显示消息“正在 {site name} 上等待...”。

这是视图中的一些代码:

@using (Html.BeginForm("Login", "Admin", FormMethod.Post))
{
           <label>
             <b>Username</b>
           </label>
           @Html.TextBoxFor(m => m.UserName, new { @class = "span12" })
           <span class="validation">@Html.ValidationMessageFor(m => m.UserName)</span>

           <label>
             <b>Password</b>
           </label>
           @Html.PasswordFor(m => m.Password, new { @class = "span12" })

           <input id="Submit1" type="submit" value="Sign In" class="btn btn-primary pull-right" />
}

这是控制器的一部分。我省略了一些错误处理,但您会明白这是一个简单的“检查用户名和密码是否存在”操作。

        [HttpPost]
        public ActionResult Login(ModelAdminLogin Model)
        {
            if (ModelState.IsValid) 
            {
                LoginResponse Res = obj_bllCA.Login(Model.UserName, Model.Password);
                if (Res.LoginStatus)
                {
                  return RedirectToAction("Index");
                }
            }
            return View(Model);
        }

在登录页面,输入登录信息并点击登录后,它会“旋转”几分钟,然后显示页面未找到消息:

奇怪的是,如果您然后单击刷新,它会显示用户登录的正确页面。

同样,在我的 PC 上的 Visual Studio 和我公司的 Web 服务器上,登录过程运行良好。用户输入用户名和密码,单击登录,然后将他们带到下一页。只有在客户端的服务器上,它才会转到丢失的页面。

更新 #1

使用 Fiddler,我得到了这个错误信息来显示:

ReadResponse() 失败:服务器没有为此请求返回完整的响应。服务器返回 0 个字节。

使用 Chrome 工具,我可以看到它在单击提交按钮后停止:

看起来它没有发布到控制器。有人对如何解决这个问题有建议吗?

【问题讨论】:

  • 检查客户端错误,并将适当的日志记录添加到服务器端。特别注意无限循环的情况。
  • 我发现 fiddler 是一个有用的免费工具,只是为了确保呼叫按您期望的方向进行。
  • 也许这是一个愚蠢的问题,但您的应用程序的数据库连接字符串是否与您的客户端配置相匹配?你确定你不是在某个地方试图从无法访问的数据源获取数据吗?
  • 你可以检查服务器上没有工作的事件查看器。
  • @Luc 我应该在事件查看器中寻找什么?最近好像什么都没有更新。我的文件夹选项(左侧)是自定义视图(服务器角色、管理事件)、窗口日志(应用程序、安全性、设置、系统、转发事件)、应用程序和服务(除了 windows power shell 之外都是空的)。

标签: c# asp.net asp.net-mvc iis razor


【解决方案1】:

我如何诊断为什么一个 asp.net MVC 站点可以在一台服务器上运行,而在另一台服务器上却不行?

使用 chrome 开发工具,您可以诊断出某些问题的原因:

内部服务器错误: (在本例中为 500 内部服务器错误)

您可以点击具体请求,然后点击预览以获取详细信息:

【讨论】:

  • 谢谢。我使用 Chrome 开发工具没有收到错误,但我确实看到该过程“停滞”。使用 fiddler 我可以看到消息 ReadResponse() failed: The server did not return a complete response for this request。服务器返回 0 个字节。知道是什么原因造成的,或者如何找到造成这种情况的原因吗?
【解决方案2】:

根据 ReadResponse 错误,似乎是 IIS 配置问题:

  • 如果您有HTTPS,请检查相应的绑定、端口和证书是否正确。
  • 如果您使用重写,请检查是否安装了 URLRewrite 模块。

一般:

  • 启用 IIS 日志记录并查看日志。
  • 在 IIS 中启用失败的请求跟踪并查看跟踪。
  • 确保处理 Application_Error 并将异常详细信息写入日志。

【讨论】:

    【解决方案3】:

    结果证明客户端已在 IIS 中将站点设置为安全站点。我不得不使用https://sitename.com 而不是sitename.com 或http://sitename.com。一旦我这样做了,所有的页面都工作了。我不明白为什么原始页面没有 https 也能正常工作,或者为什么点击刷新会显示没有 https 的正确页面,所以如果有人对此有任何意见,请告诉我。否则 https 就是整个问题。

    【讨论】:

      【解决方案4】:

      我有小写字符

      .../student/create 
      

      代替大写字符

      .../Student/Create :0)
      

      【讨论】:

      • :0) 代码的一部分吗?
      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多