서버 측에서 스프레드 시트를 생성하고 매크로를 실행하는 웹 응용 프로그램이 있습니다. 그런 다음 전자 메일을 통해 다른 개인에게 보냅니다. 그것은 우리가 전환하고 있지만 IIS에서 웹 사이트로 전달한 새로운 응용 프로그램을 여전히 지원하는 기존보고 스타일의 일부입니다.Server Side Generated Excel에서 System.Runtime.InteropServices.COMException 오류 발생
Office 자동화를 지원하지 않는 Microsoft의 정보를 보았을 때 Office Automation을 수행하는 것은 나쁜 습관이라는 것을 알고 있습니다. 또한 답변에 표시되어 있습니다 opening excel error: System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID
어쨌든 3 ~ 300 개의 보고서를 다른 사람에게 전송할 수있는 일괄 시나리오에서 생성되는 Excel 보고서가 짧습니다. 그것이 밖으로 배변 후 20 항목으로 15 주위에 도달 할 때까지 보고서 생성은 나에게 잘못 될 일을
System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at Ci.Infrastructure.Reporting.ReportProviderExcel.RunReport()
아래의 오류를 제공, 잘 작동? 첫 번째 보고서가 성공적으로 나왔습니다. 15 번째 보고서에서 20 번째 보고서가 생성되면 오류가 다시 발생합니다.
업데이트 : 문제를 확인하려고했지만 문제를 해결할 해결책이 필요합니다. 이것은 우리가 앞으로 지원을 멈추게 할 유산에 대한 것이지만 과도기에 우리는 그것이 작동 할 필요가 있음을 기억하십시오.
우리는 일련 화를 시도했지만 여전히 작동하지 않습니다. COM 예외를 쳤을 때 Excel 보고서를 생성하는 스레드를 잠자려고 시도했지만 작동하지만 우아한 결과는 아닙니다. 이 문제를 해결할 수있는 좋은 해결책은 현상금이 부여됩니다.
또 다른 업데이트 :
에이 일이 해결은 결국 MarkWalls는 말처럼
finally
{
if (dataWorksheet != null)
{
Marshal.ReleaseComObject(dataWorksheet);
}
if (worksheets != null)
{
Marshal.ReleaseComObject(worksheets);
}
if (workbook != null)
{
workbook.Close(false);
Marshal.ReleaseComObject(workbook);
}
if (workbooks != null)
{
workbooks.Close();
Marshal.ReleaseComObject(workbooks);
}
if (excel != null)
{
excel.Quit();
Marshal.ReleaseComObject(excel);
}
}
을 차단 완전히 EXCEL을 지 웁니다 작업의 단위로 엑셀 인스턴스의 각 가까운 프로세스를 다시 사용하기 전에.
. "거의"효과가 있습니다.이 오류는 프로세스와 Excel.exe 프로세스간에 통신 문제가 있음을 의미합니다. 아마도 타이밍 문제, 경쟁 조건 등입니다. 한 컴퓨터에서 Excel로 보류중인 요청/COM 호출이 하나 이상 있지 않도록 Excel에 대한 모든 호출을 직렬화하는 것이 좋습니다. –
두 가지 : 애플리케이션을 다시 실행하지 않고 스프레드 시트를 생성하고 삭제하는 코드를 다시 작성할 수 있습니까? 너무 많은 노력이 필요하다면 인스턴스 간 간격을 설정하여 리소스를 확보 할 시간을 확보하십시오. – RandomUs1r