C# 终止MVC应用程序和资源配置Microsoft.Practices.Unity.MVC时事件查看器出错

C# 终止MVC应用程序和资源配置Microsoft.Practices.Unity.MVC时事件查看器出错,c#,events,model-view-controller,nuget,C#,Events,Model View Controller,Nuget,如何修复此错误? MVC应用程序因ldle超时而关闭时出错。 它发生在从库Microsoft.Practices.Unity.Mvc关闭的方法中 如果关闭方法为注释掉,则不会发生错误。但是,我想,资源并没有得到清理。我想对发生的错误和资源进行清理。 请帮忙 事件查看器中出现错误: - <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> - <System> <Provider

如何修复此错误? MVC应用程序因ldle超时而关闭时出错。 它发生在从库Microsoft.Practices.Unity.Mvc关闭的方法中 如果关闭方法为注释掉,则不会发生错误。但是,我想,资源并没有得到清理。我想对发生的错误和资源进行清理。 请帮忙

事件查看器中出现错误:

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Application Error" /> 
  <EventID Qualifiers="0">1000</EventID> 
  <Level>2</Level> 
  <Task>100</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2017-07-24T09:22:08.000000000Z" /> 
  <EventRecordID>12394</EventRecordID> 
  <Channel>Application</Channel> 
  <Computer>name</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>w3wp.exe</Data> 
  <Data>8.5.9600.16384</Data> 
  <Data>5215df96</Data> 
  <Data>clr.dll</Data> 
  <Data>4.6.1087.0</Data> 
  <Data>583e5e56</Data> 
  <Data>c00000fd</Data> 
  <Data>000000000000b23a</Data> 
  <Data>a70</Data> 
  <Data>01d3045e0a63e3f7</Data> 
  <Data>c:\windows\system32\inet\w3wp.exe</Data> 
  <Data>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll</Data> 
  <Data>908f1a25-7051-11e7-80e7-005056a1519e</Data> 
  <Data /> 
  <Data /> 
  </EventData>
  </Event>
-
- 
1000
2.
100
0x8000000000000
12394
应用
名称
- 
w3wp.exe
8.5.9600.16384 
5215df96
clr.dll
4.6.1087.0 
583E56
c00000fd
000000000000b23a
a70
01d3045e0a63e3f7
c:\windows\system32\inet\w3wp.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
908f1a25-7051-11e7-80e7-005056a1519e
WindowsLog–系统-警告 为应用程序池“PoolName”提供服务的进程意外终止。进程id为“2672”。进程退出代码为“0xc00000fd”

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Microsoft-Windows-WAS" Guid="{524B5D04-133C-4A62-8362-64E8EDB9CE40}" EventSourceName="WAS" /> 
  <EventID Qualifiers="32768">5009</EventID> 
  <Version>0</Version> 
  <Level>3</Level> 
  <Task>0</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2017-07-24T09:22:22.000000000Z" /> 
  <EventRecordID>38904</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="0" ThreadID="0" /> 
  <Channel>System</Channel> 
  <Computer>name</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data Name="AppPoolID">PoolName</Data> 
  <Data Name="ProcessID">2672</Data> 
  <Data Name="ExitCode">c00000fd</Data> 
  </EventData>
  </Event>
-
- 
5009
0
3.
0
0
0x8000000000000
38904
系统
名称
- 
池名
2672
c00000fd
代码文件,如果要注释掉一种禁用此错误的方法,则不会发生此错误

using System.Linq;
using System.Web.Mvc;
using Microsoft.Practices.Unity.Mvc;

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(SpecificationSap.App_Start.UnityWebActivator), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(SpecificationSap.App_Start.UnityWebActivator), "Shutdown")]

namespace SpecificationSap.App_Start
{
    /// <summary>Provides the bootstrapping for integrating Unity with ASP.NET MVC.</summary>
    public static class UnityWebActivator
    {
        /// <summary>Integrates Unity when the application starts.</summary>
        public static void Start() 
        {
            var container = UnityConfig.GetConfiguredContainer();

            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));

            DependencyResolver.SetResolver(new UnityDependencyResolver(container));

            // TODO: Uncomment if you want to use PerRequestLifetimeManager
            // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
        }

        /// <summary>Disposes the Unity container when the application is shut down.</summary>
        public static void Shutdown()
        {
            var container = UnityConfig.GetConfiguredContainer();
            container.Dispose();
        }
    }
} 
使用System.Linq;
使用System.Web.Mvc;
使用Microsoft.Practices.Unity.Mvc;
[组件:WebActivatorEx.PreApplicationStartMethod(类型)(规格sap.App\u Start.UnityWebActivator),“开始”)]
[程序集:WebActivatorEx.ApplicationShutdownMethod(类型)(规格sap.App\u Start.UnityWebActivator),“关机”)]
命名空间规范sap.App\u开始
{
///提供用于将Unity与ASP.NET MVC集成的引导。
公共静态类UnityWebActivator
{
///在应用程序启动时集成Unity。
公共静态void Start()
{
var container=UnityConfig.GetConfiguredContainer();
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType().First());
FilterProviders.Providers.Add(新UnityFilterAttributeFilterProvider(容器));
SetResolver(新UnitedDependencyResolver(容器));
//TODO:如果要使用PerRequestLifetimeManager,请取消注释
//Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
///在应用程序关闭时处置Unity容器。
公共静态无效关机()
{
var container=UnityConfig.GetConfiguredContainer();
container.Dispose();
}
}
} 
OP在问题中发布的答案。我已进入以下答案:

在调试模式下启动应用程序时,我看到了错误:

System.StackOverflowException未处理消息:未处理 中发生“System.StackOverflowException”类型的异常 mscorlib.dll

stackoverflow的原因是对UnityContainer的无限递归调用,我认为这是(奇怪的)由自动注册的IUnityContainer引起的,它不是由我们的代码管理的,应该在unity库中处理。我只需将UnityContainer类的用法与重写Dispose并在递归调用中返回的派生类交换,就可以停止无限递归:

public class CustomUnityContainer : UnityContainer
{

    private bool inDispose = false;

    protected override void Dispose(bool disposing)
    {
        if (inDispose) //prevents recursive calls into Dispose
            return;

        inDispose = true;

        base.Dispose(disposing);

        inDispose = false;

    }
}

总的来说,我希望我已经正确地解决了这个问题。如果您有任何意见和建议,请与我们分享,因为我的问题仍然悬而未决,而不是我正确解决了问题。

Stackoverflow不接受我帐户的答案。“我们不再接受来自此帐户的答案。有关详细信息,请参阅帮助中心。”