【问题标题】:WebApi REST service on IIS using Autofac, error on first call madeIIS上使用Autofac的WebApi REST服务,第一次调用出错
【发布时间】:2016-04-14 16:55:24
【问题描述】:

我遇到了托管在 IIS 上并提供 REST API 的 WebAPI 项目的问题。 该项目使用 Autofac 来创建控制器。这工作正常,没有问题。 但是,在调用 REST API 一段时间后(相当长,很难计时),服务器返回错误。再次拨打相同的电话时,一切都恢复正常。 经过研究,我注意到 Autofac 无法创建导致 500 错误的实例(因此最终用户会收到错误消息)。

这是服务器返回的错误信息(表示 autofac 无法创建实例。

尝试创建“TranslationController”类型的控制器时出错。确保控制器有一个无参数的公共构造函数。

at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken) 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()

使用 Autofac 的 WebApi 扩展并且可以正常工作(第一次加载除外)。

这是注册控制器的模块:

public class WebApiIntegrationModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
    }
}

控制器使用的所有依赖项都在同一个程序集中,因此不需要其他程序集来实例化控制器。

服务实际上运行没有问题,除了第一次加载。 我一直在寻找答案,但我没有找到任何答案。我希望这里有人知道从哪里开始寻找? 这肯定与 IIS 中服务的初始负载有关,但我看不出有什么问题。我错过了什么?

【问题讨论】:

  • 查看您的依赖关系何时构建 - 可能在您的服务器实际启动之后。

标签: c# rest asp.net-web-api autofac


【解决方案1】:

我实际上是通过更改 IIS 下应用程序池的 StartMode 解决了这个问题。它现在设置为“AlwaysRunning”,因此初始加载问题已经消失。 我不确定是否有更好的选择,但我肯定可以接受这个(保持它运行对于这种类型的应用程序来说不是问题)。

希望这对其他人有帮助!

更新

似乎此属性的 UI 设置仅适用于 IIS 8 及更高版本,IIS 7.5 (Windows 2008 R2) 并未在 UI 中显示此属性,尽管它存在。

要在这些版本上更新它,您可以使用此命令(在 CMD 中运行)

%windir%\system32\inetsrv\appcmd set apppool "AppPoolName" -startMode:AlwaysRunning

其中 AppPoolName 是您的应用程序池的名称。

请注意,这也适用于较新的版本。 创建此命令的 bat 文件应为所有版本(支持它)设置此属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多