Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ObjectDataSource调用WCF服务抛出无法访问dispose对象_C#_Iis_Autofac_Telerik Reporting - Fatal编程技术网

C# ObjectDataSource调用WCF服务抛出无法访问dispose对象

C# ObjectDataSource调用WCF服务抛出无法访问dispose对象,c#,iis,autofac,telerik-reporting,C#,Iis,Autofac,Telerik Reporting,在Windows Server 2012的IIS上部署程序时,我遇到程序抛出无法访问dispose对象 根据代码,代码可以在我的PC开发和生产中正常运行,但在部署到测试服务器时出现问题 症状是我可以在部署后第一次很好地运行程序,然后当我重新进入它抛出的页面时无法访问处置对象 我还使用soap反复检查服务以发送请求,但没有发现问题,现在在不同的PC和服务器上测试后,它也可以运行 我不确定在配置或服务器规范方面我还需要做些什么。 因为其他可以运行的服务器的ram超过8GB,但在发现问题的测试服务器中

在Windows Server 2012的IIS上部署程序时,我遇到程序抛出无法访问dispose对象

根据代码,代码可以在我的PC开发和生产中正常运行,但在部署到测试服务器时出现问题 症状是我可以在部署后第一次很好地运行程序,然后当我重新进入它抛出的页面时无法访问处置对象

我还使用soap反复检查服务以发送请求,但没有发现问题,现在在不同的PC和服务器上测试后,它也可以运行

我不确定在配置或服务器规范方面我还需要做些什么。 因为其他可以运行的服务器的ram超过8GB,但在发现问题的测试服务器中只有4GB的ram,或者我必须编辑我的代码

将数据源绑定到服务的代码部分

        #region Employeeprofile
        this.EmployeeProfileDataSource.DataMember = "GetWF_30EmployeeProfile";
        this.EmployeeProfileDataSource.DataSource = typeof(THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager);
        this.EmployeeProfileDataSource.Name = "EmployeeProfileDataSource";
        this.EmployeeProfileDataSource.Parameters.AddRange(new Telerik.Reporting.ObjectDataSourceParameter[] {
        new Telerik.Reporting.ObjectDataSourceParameter("employeeNo", typeof(string), empNo)});
        report.DataSource = this.EmployeeProfileDataSource;
        #endregion

        #region Spouse
        this.SpouseDataSource.DataMember = "GetWF_30SummaryMarriageFromBeforeApprove";
        this.SpouseDataSource.DataSource = typeof(THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager);
        this.SpouseDataSource.Name = "SpouseDataSource";
        this.SpouseDataSource.Parameters.AddRange(new Telerik.Reporting.ObjectDataSourceParameter[] {
        new Telerik.Reporting.ObjectDataSourceParameter("employeeNo", typeof(string), empNo)});
然后,EmployeeProfilesReportManager启动服务并呼叫

    public EmployeeProfilesReportManager()
    {
        _service =Autofac.Integration.Mvc.AutofacDependencyResolver.Current.GetService<IService.IReportEmployeeProfileService>();
        _logExceptionService = Autofac.Integration.Mvc.AutofacDependencyResolver.Current.GetService<IService.ILogException>();
    }
我希望有问题的服务器可以像其他服务器一样正常运行。 多谢各位

使用诊断工具后,我得到了以下信息

DetailID = 18
    Count:    1
    Type:     System.ObjectDisposedException
    Message:  Cannot access a disposed object.
    Stack:    
        [HelperMethodFrame]
        System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable()
        System.ServiceModel.Channels.CommunicationObject.Open(System.TimeSpan)
        System.ServiceModel.Channels.ServiceChannel+CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(System.ServiceModel.Channels.ServiceChannel, System.TimeSpan)
        System.ServiceModel.Channels.ServiceChannel+CallOnceManager.CallOnce(System.TimeSpan, CallOnceManager)
        System.ServiceModel.Channels.ServiceChannel.EnsureOpened(System.TimeSpan)
        System.ServiceModel.Channels.ServiceChannel.Call(System.String, Boolean, System.ServiceModel.Dispatcher.ProxyOperationRuntime, System.Object[], System.Object[], System.TimeSpan)
        System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(System.Runtime.Remoting.Messaging.IMethodCallMessage, System.ServiceModel.Dispatcher.ProxyOperationRuntime)
        System.ServiceModel.Channels.ServiceChannelProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage)
        System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
        [TPMethodFrame]
        THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager.GetWF_30EmployeeProfile(System.String)
        [DebuggerU2MCatchHandlerFrame]
        [HelperMethodFrame_PROTECTOBJ]
        System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])
        System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].TryResolveDataSourceInstance(Boolean, System.Object ByRef, System.String ByRef)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource(Boolean)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource()
        Telerik.Reporting.Processing.Data.ObjectDataEnumerable.GetEnumerator()
        Telerik.Reporting.Processing.Data.ResultSetAdapter.Fill(Telerik.Reporting.Processing.Data.ResultSet, System.Collections.Generic.IEnumerable`1<Telerik.Reporting.Processing.IDataObject>)
        Telerik.Reporting.Processing.Data.MultidimentionalDataProvider.Execute(Telerik.Reporting.Processing.Data.MultidimensionalQuery)
        Telerik.Reporting.Processing.Report.ResolveData()
        Telerik.Reporting.Processing.Report.ProcessItemCore()
        Telerik.Reporting.Processing.Report.ProcessItem()
        Telerik.Reporting.Processing.ReportItemBase.ProcessElement()
        Telerik.Reporting.Processing.ProcessingElement.Process(Telerik.Reporting.Processing.Data.IDataMember)
        Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, Telerik.Reporting.Processing.IRenderingContext)
        Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, System.Collections.Hashtable, Telerik.Reporting.Processing.IRenderingContext)
        Telerik.Reporting.Services.Engine.ReportRenderer.Render(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)
        System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
        System.Threading.ThreadHelper.ThreadStart(System.Object)
        [GCFrame]
        [DebuggerU2MCatchHandlerFrame]
        [ContextTransitionFrame]
        [DebuggerU2MCatchHandlerFrame]


DetailID = 19
    Count:    1
    Type:     System.ObjectDisposedException
    Message:  Cannot access a disposed object.
    Stack:    
        [HelperMethodFrame]
        System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)
        System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
        [TPMethodFrame]
        THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager.GetWF_30EmployeeProfile(System.String)
        [DebuggerU2MCatchHandlerFrame]
        [HelperMethodFrame_PROTECTOBJ]
        System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])
        System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].TryResolveDataSourceInstance(Boolean, System.Object ByRef, System.String ByRef)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource(Boolean)
        Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource()
        Telerik.Reporting.Processing.Data.ObjectDataEnumerable.GetEnumerator()
        Telerik.Reporting.Processing.Data.ResultSetAdapter.Fill(Telerik.Reporting.Processing.Data.ResultSet, System.Collections.Generic.IEnumerable`1<Telerik.Reporting.Processing.IDataObject>)
        Telerik.Reporting.Processing.Data.MultidimentionalDataProvider.Execute(Telerik.Reporting.Processing.Data.MultidimensionalQuery)
        Telerik.Reporting.Processing.Report.ResolveData()
        Telerik.Reporting.Processing.Report.ProcessItemCore()
        Telerik.Reporting.Processing.Report.ProcessItem()
        Telerik.Reporting.Processing.ReportItemBase.ProcessElement()
        Telerik.Reporting.Processing.ProcessingElement.Process(Telerik.Reporting.Processing.Data.IDataMember)
        Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, Telerik.Reporting.Processing.IRenderingContext)
        Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, System.Collections.Hashtable, Telerik.Reporting.Processing.IRenderingContext)
        Telerik.Reporting.Services.Engine.ReportRenderer.Render(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)
        System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
        System.Threading.ThreadHelper.ThreadStart(System.Object)
        [GCFrame]
        [DebuggerU2MCatchHandlerFrame]
        [ContextTransitionFrame]
        [DebuggerU2MCatchHandlerFrame]
这是来自分析工具

Thread 24 - System ID 3404



Entry point   clr!LogHelp_LogAssert+18208 
Create time   5/9/2562 19:21:15 
Time spent in user mode   0 Days 00:00:00.015 
Time spent in kernel mode   0 Days 00:00:00.000 


This thread is not fully resolved and may or may not be a problem. Further analysis of these threads may be required.

The thread has evidence of .net exceptions on the stack. Check the Previous .NET Exceptions Report (Exceptions in all .NET Thread Stacks) to view more details of the associated exception  





.NET Call Stack




[[HelperMethodFrame]] 
System_ServiceModel_ni!System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable()+15a 
System_ServiceModel_ni!System.ServiceModel.Channels.CommunicationObject.Open(System.TimeSpan)+b8 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel+CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(System.ServiceModel.Channels.ServiceChannel, System.TimeSpan)+12 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel+CallOnceManager.CallOnce(System.TimeSpan, CallOnceManager)+10d 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel.EnsureOpened(System.TimeSpan)+28 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel.Call(System.String, Boolean, System.ServiceModel.Dispatcher.ProxyOperationRuntime, System.Object[], System.Object[], System.TimeSpan)+1af 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(System.Runtime.Remoting.Messaging.IMethodCallMessage, System.ServiceModel.Dispatcher.ProxyOperationRuntime)+61 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannelProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage)+90 
mscorlib_ni!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)+114 
[[TPMethodFrame] (THP.Welfare.IService.IReportEmployeeProfileService.GetWF_30EmployeeProfiles)] THP.Welfare.IService.IReportEmployeeProfileService.GetWF_30EmployeeProfiles(System.String) 
THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager.GetWF_30EmployeeProfile(System.String)+59 
[[DebuggerU2MCatchHandlerFrame]] 
[[HelperMethodFrame_PROTECTOBJ] (System.RuntimeMethodHandle.InvokeMethod)] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean) 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])+80 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+92 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].TryResolveDataSourceInstance(Boolean, System.Object ByRef, System.String ByRef)+2ec 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource(Boolean)+2c 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource()+23 
Telerik.Reporting.Processing.Data.ObjectDataEnumerable.GetEnumerator()+1d 
Telerik.Reporting.Processing.Data.ResultSetAdapter.Fill(Telerik.Reporting.Processing.Data.ResultSet, System.Collections.Generic.IEnumerable`1)+249 
Telerik.Reporting.Processing.Data.MultidimentionalDataProvider.Execute(Telerik.Reporting.Processing.Data.MultidimensionalQuery)+af 
Telerik.Reporting.Processing.Report.ResolveData()+256 
Telerik.Reporting.Processing.Report.ProcessItemCore()+68 
Telerik.Reporting.Processing.Report.ProcessItem()+a0 
Telerik.Reporting.Processing.ReportItemBase.ProcessElement()+27 
Telerik.Reporting.Processing.ProcessingElement.Process(Telerik.Reporting.Processing.Data.IDataMember)+c4 
Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, Telerik.Reporting.Processing.IRenderingContext)+590 
Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, System.Collections.Hashtable, Telerik.Reporting.Processing.IRenderingContext)+1d0 
Telerik.Reporting.Services.Engine.ReportRenderer.Render(Telerik.Reporting.Services.Engine.ReportRendererArgs)+bc 
Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)+51 
Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)+5a 
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+160 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+17 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+52 
mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+5d 
[[GCFrame]] 
[[DebuggerU2MCatchHandlerFrame]] 
[[ContextTransitionFrame]] 
[[DebuggerU2MCatchHandlerFrame]] 

Full Call Stack




KERNELBASE!RaiseException+6c 
clr!LogHelp_LogAssert+16565 
clr!LogHelp_LogAssert+16363 
[[HelperMethodFrame]] 
System_ServiceModel_ni!System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable()+15a 
System_ServiceModel_ni!System.ServiceModel.Channels.CommunicationObject.Open(System.TimeSpan)+b8 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel+CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(System.ServiceModel.Channels.ServiceChannel, System.TimeSpan)+12 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel+CallOnceManager.CallOnce(System.TimeSpan, CallOnceManager)+10d 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel.EnsureOpened(System.TimeSpan)+28 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannel.Call(System.String, Boolean, System.ServiceModel.Dispatcher.ProxyOperationRuntime, System.Object[], System.Object[], System.TimeSpan)+1af 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(System.Runtime.Remoting.Messaging.IMethodCallMessage, System.ServiceModel.Dispatcher.ProxyOperationRuntime)+61 
System_ServiceModel_ni!System.ServiceModel.Channels.ServiceChannelProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage)+90 
mscorlib_ni!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)+114 
clr!GetMetaDataInternalInterface+1e30e 
clr!GetMetaDataPublicInterfaceFromInternal+2a8f1 
clr!PreBindAssemblyEx+1b12d 
[[TPMethodFrame] (THP.Welfare.IService.IReportEmployeeProfileService.GetWF_30EmployeeProfiles)] THP.Welfare.IService.IReportEmployeeProfileService.GetWF_30EmployeeProfiles(System.String) 
clr!GetMetaDataInternalInterface+1e251 
THP.Welfare.Reporting.ReportManager.EmployeeProfilesReportManager.GetWF_30EmployeeProfile(System.String)+59 
clr+3753 
clr+361c 
clr!GetMetaDataInternalInterface+31766 
clr!GetMetaDataInternalInterface+31550 
[[DebuggerU2MCatchHandlerFrame]] 
[[HelperMethodFrame_PROTECTOBJ] (System.RuntimeMethodHandle.InvokeMethod)] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean) 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])+80 
mscorlib_ni!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+92 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].TryResolveDataSourceInstance(Boolean, System.Object ByRef, System.String ByRef)+2ec 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource(Boolean)+2c 
Telerik.Reporting.Processing.Data.ObjectDataProviderBase`1[[System.__Canon, mscorlib]].ResolveDataSource()+23 
Telerik.Reporting.Processing.Data.ObjectDataEnumerable.GetEnumerator()+1d 
Telerik.Reporting.Processing.Data.ResultSetAdapter.Fill(Telerik.Reporting.Processing.Data.ResultSet, System.Collections.Generic.IEnumerable`1<Telerik.Reporting.Processing.IDataObject>)+249 
Telerik.Reporting.Processing.Data.MultidimentionalDataProvider.Execute(Telerik.Reporting.Processing.Data.MultidimensionalQuery)+af 
Telerik.Reporting.Processing.Report.ResolveData()+256 
Telerik.Reporting.Processing.Report.ProcessItemCore()+68 
Telerik.Reporting.Processing.Report.ProcessItem()+a0 
Telerik.Reporting.Processing.ReportItemBase.ProcessElement()+27 
Telerik.Reporting.Processing.ProcessingElement.Process(Telerik.Reporting.Processing.Data.IDataMember)+c4 
Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, Telerik.Reporting.Processing.IRenderingContext)+590 
Telerik.Reporting.Processing.ReportProcessor.ProcessReport(Telerik.Reporting.ReportSource, System.Collections.Hashtable, Telerik.Reporting.Processing.IRenderingContext)+1d0 
Telerik.Reporting.Services.Engine.ReportRenderer.Render(Telerik.Reporting.Services.Engine.ReportRendererArgs)+bc 
Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)+51 
Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)+5a 
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+160 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+17 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+52 
mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+5d 
clr+3753 
clr+361c 
clr+44d3 
clr!TranslateSecurityAttributes+11f684 
[[GCFrame]] 
clr+6810 
clr+67c0 
clr+6705 
[[DebuggerU2MCatchHandlerFrame]] 
clr+71b0 
clr+725e 
[[ContextTransitionFrame]] 
clr+7193 
clr+67c0 
clr+6705 
[[DebuggerU2MCatchHandlerFrame]] 
clr+6947 
clr!TranslateSecurityAttributes+11f29f 
clr!LogHelp_LogAssert+1827e 
kernel32!BaseThreadInitThunk+22 
ntdll!RtlUserThreadStart+34 



Exception Information


In w3wp__ThaihealthWelfare__PID__2376__Date__09_05_2019__Time_07_21_19PM__859__First Chance System.ObjectDisposedException.dmp the assembly instruction at KERNELBASE!RaiseException in C:\Windows\System32\KERNELBASE.dll from Microsoft Corporation has caused a CLR Exception on thread 24 with the following error information:

    Type:   System.ObjectDisposedException 
    Message:   Cannot access a disposed object. 

This exception originated from System_ServiceModel_ni!System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable(). 



Module Information 

Image Name: C:\Windows\assembly\NativeImages_v4.0.30319_64\System.ServiceModel\2d239193fcf663b211916bd928cfaeb1\System.ServiceModel.ni.dll   Symbol Type:  None 
Base address: 0x00000000`00005a4d   Time Stamp:  Fri Nov 06 10:20:22 2015  
Checksum: 0x00000000`00000000   Comments:  Flavor=Retail 
COM DLL: False   Company Name:  Microsoft Corporation 
ISAPIExtension: False   File Description:  System.ServiceModel.dll 
ISAPIFilter: False   File Version:  4.6.1055.0 built by: NETFXREL2 
Managed DLL: True   Internal Name:  System.ServiceModel.dll 
VB DLL: False   Legal Copyright:  ? Microsoft Corporation. All rights reserved. 
Loaded Image Name:  System.ServiceModel.ni.dll   Legal Trademarks:   
Mapped Image Name:     Original filename:  System.ServiceModel.dll 
Module name:  System_ServiceModel_ni   Private Build:  DDBLD400 
Single Threaded:  False   Product Name:  Microsoft? .NET Framework 
Module Size:  23.41 MBytes   Product Version:  4.6.1055.0 
Symbol File Name:  System.ServiceModel.ni.dll   Special Build:  & 
在回答了这个问题之后,现在我可以用编辑我的代码来解决这个问题

在所有我称之为服务的方法中

    public List<SummaryMarriageInfoBeforeApproveModel> GetSummaryMarriageFromBeforeApprove(string employeeNo)
    {
        var result = _service.Value.GetSummaryMarriageFromBeforeApprove(employeeNo);
        _service.Dispose();
        _logExceptionService.Dispose();
        return result;
    }

次要免责声明:我知道Autofac,但我从未使用过Telerik reporting services引擎。但我能猜到发生了什么

您似乎有线程/争用条件

在评论中,您注意到[格式化为可读性]:

在startup.cs中,已将通道创建为singleton

Registerc=>newchannelFactoryDefaultService.SingleInstance

builder.Registerc=>c.Resolve.CreateChannel.UseWcfSafeRelease

我想这个是你实际使用的东西的缩写

我还看到了这个片段:

公共雇员档案报告经理 { _service=Autofac.Integration.Mvc.AutofacDependencyResolver.Current.GetService; _logExceptionService=Autofac.Integration.Mvc.AutofacDependencyResolver.Current.GetService; } 报表管理器正在使用MVC依赖项解析器上的服务位置来获取一些内容。关于MVC依赖项解析器,需要注意的重要一点是它与当前请求相关联。当当前请求结束时,请求生存期范围将与在该范围内解析的所有一次性对象一起处理。这包括WCF服务客户端之类的东西

最后,在底部发布的错误的堆栈跟踪如下所示:

        Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)
        System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
        System.Threading.ThreadHelper.ThreadStart(System.Object)
这里有一个ThreadStart调用,所以这个渲染引擎似乎在另一个线程上运行,可能是从控制器启动的,但可能与请求生命周期无关

我猜发生的是:

MVC请求启动 Autofac请求生存期启动Autofac依赖项解析器请求生存期 报表服务已设置并开始执行 构造函数运行并可以解析服务客户端 MVC请求结束 Autofac请求生存期随服务客户端一起处理 Reporting service线程尝试使用已解析但现在已释放的客户端 我们在Autofac中经常看到这一点,在Autofac中,人们尝试在web应用程序中启动后台服务或非基于请求的内容,但仍然尝试将后台服务线程与web/请求相关的依赖项解析程序和生存期范围绑定在一起

考虑到我对Telerik报告引擎了解不够,我不知道有哪些钩子允许DI进入它。老实说,我甚至不能保证这就是问题所在,但它看起来和我在其他问题中看到的一模一样

我的建议是:

不要在EmployeeProfileReportManager中使用MVC依赖项解析程序或其他类似的工具。 不是在EmployeeProfileReportManager中解析IService.IReportEmployeeProfileService,而是解析Owned。允许您控制处置。这一点很重要,因为CommonServiceLocator是从容器中解析的,如果您不自己控制处理,您将得到内存泄漏。 在EmployeeProfileReportManager中,确保在处理完服务客户端后将其处理掉。因为您使用的是Owned,所以这不会自动发生。
在startup.cs中,将创建通道作为singleton builder.Registerc=>new ChannelFactoryDefaultService.SingleInstance;builder.Registerc=>c.Resolve.CreateChannel.UseWcfSafeRelease;我认为,建议在resolve被DisposeEdit之后使用调试诊断工具为这个ObjectDisposeException捕获一个转储文件。通过转储文件,我们知道了那里发生了什么,以及如何解决这个问题。
    public List<SummaryMarriageInfoBeforeApproveModel> GetSummaryMarriageFromBeforeApprove(string employeeNo)
    {
        var result = _service.Value.GetSummaryMarriageFromBeforeApprove(employeeNo);
        _service.Dispose();
        _logExceptionService.Dispose();
        return result;
    }
        Telerik.Reporting.Services.Engine.Rendering.RenderWithCulture(Telerik.Reporting.Services.Engine.ReportRendererArgs)
        Telerik.Reporting.Services.Engine.Rendering.ThreadFunc(System.Object)
        System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
        System.Threading.ThreadHelper.ThreadStart(System.Object)