【问题标题】:How to prevent application pool stop, on POST requests?如何在 POST 请求中防止应用程序池停止?
【发布时间】:2017-08-29 05:18:13
【问题描述】:

我在 https 子域上放置了一个 web api 服务。我使用城堡 Windsor 创建所有类(每个 Web 请求),从控制器到域对象。

我在本地机器上测试了所有操作,还使用了提琴手。一切正常。并且没有发生内存泄漏。而且我们还有一个可以处理所有动作的移动程序员,而且一切都很好。

但在 https 上托管后,通过对 web api url 的每个请求,应用程序池都会停止。

但授权请求工作正常。我的申请有什么问题?这是我的配置文件代码:

 public static class WebApiConfig
{
    public static void Register(HttpConfiguration config, IAppBuilder app)
    {


        // Web API configuration and services
        var container =Bootstrapper.WireUp();

        ConfigCors(container, config);



        RegisterControllers(container);

        UserManagement.Config.Bootstrapper.WireUp(container);
        config.Services.Replace(typeof(IHttpControllerActivator), new WindsorControllerActivator(container));

        container.Register(Component.For<IDataProtectionProvider>().ImplementedBy<DpapiDataProtectionProvider>()
             .UsingFactoryMethod(x => app.GetDataProtectionProvider()));

        // Web API routes
        config.MapHttpAttributeRoutes();
        config.AddFiveLevelsOfMediaType();

        config.Routes.MapHttpRoute(
           name: "DefaultApiWithAction",
           routeTemplate: "api/{controller}/{action}/{id}",
           defaults: new { id = RouteParameter.Optional }
       );
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        //config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
    }

    private static void ConfigCors(IWindsorContainer container, HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "*"); 

        config.EnableCors(cors);
    }

【问题讨论】:

  • 检查服务器的事件日志,杀死池的错误可能记录在那里

标签: c# asp.net-mvc asp.net-web-api2 application-pool


【解决方案1】:

应用程序池停止没有具体原因。它可能是 Windows 注册表错误、系统错误或程序集权限错误。找出原因的最好方法是去查看事件查看器。

管理工具中选择事件查看器

或者,按 Windows 键并键入事件查看器。在那里查看 Windows 日志,然后查看应用程序日志。搜索与 IIS / ASP.Net 或 .Net 框架相关的任何错误(红色图标)或警告(黄色图标)。我已从我的系统中附加了一个示例图像 -

另一个实例 -

** 编辑**:还有另一种可能性,因为它在启用 https 后停止。检查 SSL 证书。最常见的原因是在多个站点中使用相同的证书。只有通配符证书可以在多个站点中使用。如果证书是自签名证书,请将其删除并使用 * 创建一个新证书,作为证书名称的前缀。然后使用那个。

【讨论】:

  • 亲爱的@brainless,我看不到你的图片,也找到了事件查看器,但没有找到 IIS 或 .Net 日志。
  • 亲爱的@brainless-coder ,我找到了,但我无法理解错误消息:应用程序池 'api.domain.com(domain)(4.0)(pool)' 由于一系列而被自动禁用为该应用程序池提供服务的进程中的失败次数。
  • 亲爱的@brainlessCoder,我发现这个:错误的应用程序名称:w3wp.exe,版本:8.5.9600.16384,时间戳:0x52157ba0 错误的模块名称:webdav.dll,版本:8.5.9600.16384,时间戳: 0x52157c52 异常代码: 0xc0000005 错误偏移量: 0x00018f33 错误进程 id: 0x1ed0 错误应用程序启动时间: 0x01d2ad91c92f9c59 错误应用程序路径: C:\Windows\SysWOW64\inetsrv\w3wp.exe 错误模块路径: C:\Windows\System32\inetsrv\ webdav.dll 报告 ID:0bd7b250-1985-11e7-80ba-000c295cf30d 错误包全名:错误包相关应用程序 ID:...
  • 请检查我在答案中的编辑,这可能是 SSL 证书的结果。
  • 亲爱的@brainlessCoder 我检查了我的证书文件。服务器没有给我文件。但是在plesk中我比较了证书内容:“私钥(.key)”和“证书(.crt)”完全不同,但是“CA证书(*-ca.crt)是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2014-06-17
相关资源
最近更新 更多