我有一个像这样的子域的网站:
我的域名是“a.com”,子域名是“api.a.com”。 我在子域中发布了一个服务。 它在Get请求上正常工作。 但在获取POST请求(通过API)之前,子域的应用程序池停止。
所以我在服务器上安装了一个debugging诊断工具 。 每次POST请求到子域后,我得到5错误。 这里是分析结果:
谷歌search后,我发现w3wp错误是内存泄漏或当应用程序试图访问不属于内存的一部分。 我检查了我的整个api代码,没有任何对象没有处置,所有的生命周期都是“PerWebRequest”。 更何况我用温莎城堡来控制所有物体,甚至控制器的生命周期。
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()); }
但是作为一个testing,我在POST方法中返回了一个带有任何代码的简单string(这会导致崩溃),但没有任何更改,并且在向web api发送POST请求之后,应用程序池又停止了。
毕竟,我发现“api.a.com”的子域身份(在应用程序池中)与“cdn.a.com”和“test.a.com”等其他子域不同。因此,我发布我的代码到这个领域之一,每一件事情都很好。
删除并重新创build“api.a.com”后,身份被更改,但“api.a.com”的应用程序池再次停止。
作为更多信息,Host安装了Plesk并创build了“a.com”和“api.a.com”,在获得面板后,我创build了另外两个子域:“cdn.a.com”和“test.a. COM”。 但是主机说这不是我们的错,这是你的代码错误!
你怎么看:
一些想法: