我有一个带有一个子域名的网站,如下所示:
我的域名是“a.com”,子域名是“api.a.com”。我在子域中发布了一项服务。它在 Get 请求上运行良好。但在获取 POST 请求(通过 api)之前,子域的应用程序池停止了。
所以我安装了一个调试诊断工具在服务器上。每次对子域进行 POST 请求后,我都会收到 5 个错误。以下是分析结果:
经过谷歌搜索我发现维基百科错误是由于内存泄漏或应用程序试图访问不属于该内存的一部分而导致的。我检查了整个 api 代码,没有未释放的对象,并且它们的生命周期都是“PerWebRequest”。此外,我使用 castle Windsor 来控制所有对象(甚至控制器)的生命周期。
var container=new WindsorContainer();
container.Register(Classes.FromAssemblyContaining<VisitorRepository>().BasedOn<IRepository>()
.WithService.FromInterface().LifestylePerWebRequest());
container.Register(Classes.FromAssemblyContaining<EventService>().BasedOn<IService>()
.WithService.FromInterface().LifestylePerWebRequest());
container.Register(Component.For<EventDatabaseContext>()
.LifestylePerWebRequest()
.Forward<DbContext>());
对于控制器:
private static void RegisterControllers(IWindsorContainer container)
{
container.Register(Classes.FromAssemblyContaining<VisitorController>()
.BasedOn<ApiController>().LifestylePerWebRequest());
}
但作为测试,我返回了一个包含任何代码的简单字符串POST 方法,(导致崩溃)但没有任何变化,并且在向 Web API 发送 POST 请求后,它的应用程序池再次停止。
经过所有这些检查,我发现“api.a.com”的子域名标识(在应用程序池中)与其他子域名(如“cdn.a.com”和“test.a.com”)不同。所以我将我的代码发布到其中一个域名,一切正常。
删除并重新创建“api.a.com”后,身份发生了变化,但“api.a.com”的应用程序池再次停止。
更多信息,主机安装了 Plesk 并创建了“a.com”和“api.a.com”,在获得面板后,我创建了另外 2 个子域:“cdn.a.com”和“test.a.com”。但主机说这不是我们的错,而是你们代码的错误!
你怎么认为:
- 身份太重要以至于引发问题吗?
- 可能是服务器问题或者代码问题?
- 如何解决这个问题。因为我需要 api.a.com 工作。
答案1
一些想法:
- 异常 0x0000005 看起来像权限被拒绝错误。
- 所有例外都针对 webdav 模块,如果您不需要它,请尝试将其关闭。