Asp.net mvc 控制器操作多次命中-ASP.NET MVC 4应用程序在Azure Emulator中运行
这可能需要一些时间来解释,但我想:) 我创建了两个Visual Studio 2012项目:Asp.net mvc 控制器操作多次命中-ASP.NET MVC 4应用程序在Azure Emulator中运行,asp.net-mvc,azure,asp.net-mvc-4,visual-studio-debugging,Asp.net Mvc,Azure,Asp.net Mvc 4,Visual Studio Debugging,这可能需要一些时间来解释,但我想:) 我创建了两个Visual Studio 2012项目: 在Visual Studio的“添加项目”对话框中使用(Web->ASP.NET MVC 4 Web应用程序)模板的项目。我没有添加单元测试项目 使用Azure云服务模板(云->Windows Azure云服务)的项目。我添加了一个单独的角色,一个ASP.NETMVC4Web角色,并且再次没有添加单元测试项目 从VisualStudio为我创建这两个项目的方式来看,我完全没有触及这两个项目 对于每个项目
HomeController
类,在每个About
和Contact
操作方法(只返回视图的无聊操作)中设置断点。例如,我在方法中的唯一一行上设置了断点:
public ActionResult About()
{
return View();
}
然后我开始调试第一个项目(非Azure项目)。一切都如预期的那样-即,当我使用浏览器在About和Contact页面之间导航时,每个请求都会命中相应操作方法中的断点一次。我觉得很好
然后我开始调试Azure项目。我按照同样的步骤在About和Contact页面之间导航。这次我发现了有趣的非确定性行为。在某些请求中,在呈现页面之前,操作方法中的断点会被多次命中(有时超过两次)。有时请求会挂起,页面无法呈现(即使等待了几分钟)
我想知道为什么会发生这种情况,因为它正在影响我们正在处理的另一个Azure MVC应用程序中更复杂的事情(例如,由于这个问题,应用程序可能会尝试在我的数据库中为一个请求创建两个或多个模型对象实例)
我处于以下环境中:
- Windows 8 Pro(x64)
- Visual Studio 2012终极版
- 适用于Visual Studio 2012的Windows Azure SDK
- IIS 8快车
- Firefox浏览器和Firebug(还确认了使用IE的行为)
- SQL Server 2012(我想不是很相关)
netstat-ano
之后,我看到Azure开发结构进程正在监听端口80,所以可能这就是它需要重新映射的原因……听起来很公平
无论如何,我希望有人能知道是什么导致了这种行为。以下是我尝试过的一些额外要点和方法:
- 重置IIS,重新启动Azure计算/存储仿真程序,重新启动整个计算机
- 剥离所有脚本的视图(即,如果页面上只有一个基本的HTML段落,则行为仍然存在)
- 我试图找到相关的IIS Express日志文件,但Azure项目似乎不像其他项目那样通过IIS Express运行(正确吗?)
- 我监控了Azure Compute Emulator控制台…那里没有什么有趣的东西
- 其他人能复制这种行为吗李>
- Azure Emulator生成的其他日志是否可以帮助我
About
和Contact
操作方法中输入了一些简单的调试消息,例如:
public ActionResult About()
{
System.IO.File.AppendAllText(@"c:\Logs\azure.log", DateTime.Now + ": Contact, thread " + System.Threading.Thread.CurrentThread.ManagedThreadId + "\r\n");
return View();
}
我附加到这个文件,并开始查看HTTP上发生了什么。再次在两个About
和Contact
链接之间导航,我看到了以下输出:
从尾部开始:
- 2012年12月9日12:14:07下午:关于,线程7
- 2012年12月9日12:14:08下午:联系人,线程7
- 2012年12月9日12:14:09下午:关于,线程7
- 2012年9月12日12:14:10下午:联系方式,线程7
- 2012年9月12日12:14:11下午:关于,线程6
- 2012年12月9日12:14:12下午:联系,线程8
- 2012年12月9日12:14:31下午:联系,线程7
- 2012年12月9日12:14:50下午:联系,线程7
- 2012年12月9日12:15:03下午:关于,线程7
- 2012年12月9日12:15:05下午:联系方式,螺纹8
- 2012年12月9日12:15:23下午:关于线程6
- 2012年12月9日12:15:42下午:关于,线程14
- 2012年12月9日12:16:01下午:关于,线程6
- 2012年12月9日12:16:31下午:联系人,线程7
- 2012年9月12日12:16:33下午:关于,线程14
- 2012年12月9日12:17:08下午:联系方式,螺纹12
- 2012年12月9日12:17:09下午:关于,线程12
- 2012年12月9日12:17:28下午:关于,线程5
- HTTP通信似乎正常(Fiddler没有显示任何重复请求)
- 对于同一个请求,动作方法有时被调用两到三次,似乎是不确定的(即上述原始问题)
- 有趣的是,在我的情况下,似乎在动作方法上发生另一个“命中”之前,恰好经过了19s(即,当动作方法被多次命中时,命中之间的时间差是确定的)