【发布时间】: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