Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 除非在调试器中运行,否则IIS将挂起ASP.NET MVC 3应用程序中的特定路由请求_Asp.net Mvc 3_Iis 7.5 - Fatal编程技术网

Asp.net mvc 3 除非在调试器中运行,否则IIS将挂起ASP.NET MVC 3应用程序中的特定路由请求

Asp.net mvc 3 除非在调试器中运行,否则IIS将挂起ASP.NET MVC 3应用程序中的特定路由请求,asp.net-mvc-3,iis-7.5,Asp.net Mvc 3,Iis 7.5,我们正在处理一个非常奇怪的问题 我们有一个MVC3应用程序仍在开发中,周一我们开始遇到一个问题,其中一个控制器中有四个特定的路由(方法)。这四种路由都用于角色管理,用于创建或编辑角色。我们在应用程序中有两个不同的角色层,因此有两个用于为每个层创建角色的路由,以及两个用于为每个层编辑角色的路由。对应的创建管线的两个方法调用相同的视图,以及对应的编辑管线的两个方法。两个视图都调用共享局部视图,该视图包含与正在创建或编辑的角色的属性相对应的表单字段 问题就在这里 如果我尝试在不首先运行调试器的情况下点

我们正在处理一个非常奇怪的问题

我们有一个MVC3应用程序仍在开发中,周一我们开始遇到一个问题,其中一个控制器中有四个特定的路由(方法)。这四种路由都用于角色管理,用于创建或编辑角色。我们在应用程序中有两个不同的角色层,因此有两个用于为每个层创建角色的路由,以及两个用于为每个层编辑角色的路由。对应的创建管线的两个方法调用相同的视图,以及对应的编辑管线的两个方法。两个视图都调用共享局部视图,该视图包含与正在创建或编辑的角色的属性相对应的表单字段

问题就在这里

如果我尝试在不首先运行调试器的情况下点击这些路由,IIS将挂起。它不会出错、抛出错误,甚至不会在IIS日志中注册请求

但是,如果我尝试在调试器中访问这些路由,无论是否设置了断点,路由都会正常工作

为了让生活更有趣一点,如果我在运行并关闭调试器后尝试访问这些相同的路由,这些路由仍然可以正常工作

我们可以在开发团队和登台服务器上的每台机器上重现这种行为(登台调试部分除外)

与所有这些路由本身相对应的方法本身依赖于我们中间层中同一web服务中的几个方法。在我们的集成测试中,这些方法在调试器之外正常工作

我们已经检查了代码中的无止境循环,但是找不到在这些条件下会创建无止境循环的任何东西。事实上,在共享视图中只有一个循环,但它是一个for-each循环,不应该导致无休止的循环

最后,当我试图点击这四条路由中的任何一条而不在调试器下运行或至少在以前的请求上运行它时,IIS实际上挂起。它不会超时。它不会抛出错误。它不会将错误记录到IIS日志中。最后,它将耗尽系统资源,您必须重新启动IIS或重新启动整个计算机

以前有人见过这种行为吗?你有什么想法吗?我以前从未见过这种行为,我们开发组中的任何人都能想到的唯一一件事是对文件的某种权限问题,但在处理这些方法的过程中,我们在任何时候都不会访问文件系统(在视图文件本身之外,它们拥有适当的权限)

我愿意接受任何建议

更新#1: 我也在ASP.NET论坛上发布了这个问题,有人问了我一个问题,想了解更多信息。以下是我对他们问题的回答

我们在说什么

IIS 7.5。我们使用的是成熟的IIS,而不是IIS Express

什么错误

就这样。没有错误。没有报告任何错误。事实上,如果我们试图在未运行调试器的情况下访问这些路由,则请求本身不会记录在站点的IIS日志中。如果调试器正在运行,那么一切都会按照您的预期工作

对卡西尼

没有。Windows 7附带的IIS 7.5

如果在IIS上部署默认的WebForm项目,它是否有效

对。没有问题。实际上,我有许多WebForms应用程序,我为运行在我的开发箱上的客户维护这些应用程序。他们都工作得毫无问题

如果在IIS上部署默认的MVC项目,它是否有效

对。我有许多网站在这个盒子上运行。所有这些网站都在顺利运行。事实上,这个网站上的绝大多数路线都可以毫无问题地访问。在这个控制器内的绝大多数路由都可以访问,没有任何问题

重申一下,此控制器允许用户管理应用程序中的用户、角色和权限。我们在那里有列出、创建和更新用户、角色和权限的方法。无论调试器是否正在运行,命中用于管理用户和权限的方法的路由都会工作。给我们带来问题的唯一途径是我上面描述的四条途径

目前,我们在该应用程序中有19个控制器,每个控制器具有不同数量的已定义路由方法。为应用程序定义的每个其他路由都正常工作,并且没有显示此行为。这是我们在这一特定控制器中看到的唯一四种方法(路由)

更新#2: 我已经将范围缩小到控制器内的REST调用(对我们控制的服务)。奇怪的是,如果我进入REST服务并立即返回一个值(不处理任何内容),它仍然挂起在调试器之外。如果我在调试器内部运行或在运行调试器之后立即运行,则一切都会正常工作

如果我试图直接点击fiddler中的REST服务,它就像一个符咒

我将尝试更改我正在调用的web服务的服务合同中的URL,看看是否有效。也许这与web服务上的RESTURL有关

更新#3: 为了进一步混淆,我设置了Fiddler作为MVC应用程序和其余中间层之间的代理。对于应用程序中的每一个其他REST调用,代理都会获取请求。对于这个特定的REST调用,代理永远不会得到请求

现在是恼人的部分。我们用来调用中间层中所有方法的WebChhanelFiel厂