我有一个. NETWebAPI应用程序在我的开发机器的IIS上本地工作,但是如果我将它部署到服务器上,我会得到错误
HTTP错误503。此服务不可用。
每当我尝试访问API时。与此同时,AppPool停止(是的,它已经正确启动并正确运行,直到我进行API调用),我在事件查看器中看到错误:
为应用程序池“MyNewTestAppPool”提供服务的进程与Windows Process Activation Service发生严重通信错误。
我称之为控制器是一个非常复杂的控制器:
public class ExampleController : ApiController
{
[HttpGet]
public bool GetTrue()
{
return true;
}
}
所以这不可能是由我代码中的无限循环引起的堆栈溢出问题。我担心这是身份验证和授权链中的一个无休止的循环。
对在同一服务器上正确部署的另一个应用程序的主要更改是,此应用程序应使大多数控制器需要针对本地AD进行身份验证,只有一个控制器不需要-而其他应用程序要么始终需要身份验证,要么从不需要。
为了实现这种混合模式,我做了以下工作:
- 在Web.config中,我添加了
<authentication mode="Windows" />
- 在IIS中,我启用了匿名身份验证和Windows身份验证
- 在
Global.asax.cs
中,我将AuthorizeAttribute添加到所有控制器:GlobalConfiguration.Configuration.Filters.Add(new System.Web.Http.AuthorizeAttribute());
- 应该在没有认证的情况下可访问的单个函数已经设置了
[AllowAnonymous]
属性。
不知道那里发生了什么,有人知道发生了什么或者如何调试它吗?
1条答案
按热度按时间afdcj2ne1#
确保\IIS_IUSRS(IIS 7.x)具有对应用程序文件夹的读访问权限。确保正在使用的应用程序池标识位于IIS_IUSRS组中(例如IIS APPPOOL\DefaultAppPool)