C# 终止MVC应用程序和资源配置Microsoft.Practices.Unity.MVC时事件查看器出错
如何修复此错误? MVC应用程序因ldle超时而关闭时出错。 它发生在从库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
- <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不接受我帐户的答案。“我们不再接受来自此帐户的答案。有关详细信息,请参阅帮助中心。”