6

我在SQL Server 2012 SP1 Reporting Services實例中設置了一個訂閱,該實例將34MB文件導出到Excel 2007-2013 XLSX OpenXML呈現擴展。訂閱引發以下錯誤:孤立存儲異常:無法確定域的標識

System.IO.IsolatedStorage.IsolatedStorageException:無法確定域的標識。

我驗證了可以將報表從報表管理器導出到Excel 2007-2013 XLSX OpenXML渲染擴展中,而不會出現問題。只有通過訂閱執行報告時纔會發生此錯誤。我研究這一點,並在網上找到了以下建議:

  1. 兩個獨立的微軟連接錯誤報告764356764556那些沒有上市的變通。

  2. 推薦交錯訂閱,以便一次只運行一個訂閱。這沒有幫助,因爲在發生錯誤時只有一個訂閱正在運行。

  3. 建議使用Excel 2003渲染方法並將行分成單獨的選項卡以避免65,536行限制。我確實證實了這一點,但從商業利益相關者的角度來看,這不是一個可以接受的解決方案。

  4. 表示任何使用Excel 2007-2013呈現方法的報表大小超過10 MB的報表將從內存中生成到使用獨立存儲。沒有解釋爲什麼這是壞的,我認爲這是有原因的 - 可能是爲了限制RAM的消耗。

  5. 建議爲ASP.NET應用程序的獨立存儲文件夾中的用戶提升權限。我無法找到隔離存儲文件夾位於Reporting Services的位置。

  6. 建議使用額外的代碼來繞過隔離存儲的ASP.NET代碼,從而繞過此問題。我無法找到將此解決方案應用於Reporting Services的方法,因爲這是Microsoft提供的產品。

  7. 建議修改報告管理器和報告服務器web.config文件以在httpRuntime節點中包含maxRequestLength =「200000」。這並沒有改變結果。

  8. 建議在RSReportServer.config中顯式增加內存設置。這似乎不會有幫助,因爲錯誤與孤立存儲有關,但是我嘗試了絕望。這並沒有改變結果。

  9. 建議將DatabaseQueryTimeout值從120更改爲更大。這並沒有改變結果。

  10. 建議更改訂閱執行超時值。這並沒有改變結果。

以下是完整的錯誤日誌條目的副本:

reportrendering!WindowsService_5!1628!04/03/2013-09:48:33:: e ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.UnhandledReportRenderingException: , Microsoft.ReportingServices.ReportProcessing.UnhandledReportRenderingException: An error occurred during rendering of the report. ---> Microsoft.ReportingServices.OnDemandReportRendering.ReportRenderingException: An error occurred during rendering of the report. ---> System.IO.IsolatedStorage.IsolatedStorageException: Unable to determine the identity of domain. 
    at System.IO.IsolatedStorage.IsolatedStorage._GetAccountingInfo(Evidence evidence, Type evidenceType, IsolatedStorageScope fAssmDomApp, Object& oNormalized) 
    at System.IO.IsolatedStorage.IsolatedStorage.GetAccountingInfo(Evidence evidence, Type evidenceType, IsolatedStorageScope fAssmDomApp, String& typeName, String& instanceName) 
    at System.IO.IsolatedStorage.IsolatedStorage._InitStore(IsolatedStorageScope scope, Evidence domainEv, Type domainEvidenceType, Evidence assemEv, Type assemblyEvidenceType, Evidence appEv, Type appEvidenceType) 
    at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) 
    at System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) 
    at MS.Internal.IO.Packaging.PackagingUtilities.ReliableIsolatedStorageFileFolder..ctor() 
    at MS.Internal.IO.Packaging.PackagingUtilities.GetDefaultIsolatedStorageFile() 
    at MS.Internal.IO.Packaging.PackagingUtilities.CreateUserScopedIsolatedStorageFileStreamWithRandomName(Int32 retryCount, String& fileName) 
    at MS.Internal.IO.Packaging.SparseMemoryStream.EnsureIsolatedStoreStream() 
    at MS.Internal.IO.Packaging.SparseMemoryStream.SwitchModeIfNecessary() 
    at MS.Internal.IO.Zip.ZipIOFileItemStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.IO.Compression.DeflateStream.InternalWrite(Byte[] array, Int32 offset, Int32 count, Boolean isAsync) 
    at System.IO.Compression.DeflateStream.Write(Byte[] array, Int32 offset, Int32 count) 
    at MS.Internal.IO.Packaging.CompressStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at MS.Internal.IO.Zip.ProgressiveCrcCalculatingStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at MS.Internal.IO.Zip.ZipIOModeEnforcingStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at Microsoft.ReportingServices.Rendering.ExcelOpenXmlRenderer.XMLModel.XMLStreamsheetModel.WriteStreamToStream(Stream from, Stream to) 
    at Microsoft.ReportingServices.Rendering.ExcelOpenXmlRenderer.XMLModel.XMLStreamsheetModel.Cleanup() 
    at Microsoft.ReportingServices.Rendering.ExcelOpenXmlRenderer.OpenXmlGenerator.FinalizeWorksheet() 
    at Microsoft.ReportingServices.Rendering.ExcelOpenXmlRenderer.OpenXmlGenerator.NextWorksheet() 
    at Microsoft.ReportingServices.Rendering.ExcelRenderer.ExcelRenderer.Render(Report report, NameValueCollection reportServerParameters, NameValueCollection deviceInfo, NameValueCollection 
+0

不幸的是,看起來你已經找到了在Reporting Services的Excel渲染器中的錯誤或限制(但如果你可以通過生成報表管理器的報告,然後這聽起來像我的一個bug)。 34 MB是一個相當大的電子表格報告。這實際上是一個報告還是數據提取?它可以導出爲CSV而不是Excel格式?您可以使用SSIS將數據導出到電子表格嗎? – Nathan 2013-04-04 03:19:00

+0

我更新了Connect bugs以包含來自此問題的信息。我通過在SSIS包腳本任務中通過ReportServer URL重新發送報告來解決此錯誤。 – 2013-04-05 00:07:34

回答

4

您可以在這裏找到一個解決方案:http://rekiwi.blogspot.com/2008/12/unable-to-determine-identity-of-domain.html

在COM組件,創建一個新的AppDomain用適當的證據並在其中執行代碼。

這裏是一個固定的問題對我來說是代碼示例:要馬歇爾跨應用程序域必須標明

AppDomainSetup setup = new AppDomainSetup(); 
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory.ToString(); 

//Then we need our evidence 
System.Security.Policy.Evidence evidence = new System.Security.Policy.Evidence(); 
evidence.AddHost(new System.Security.Policy.Zone(System.Security.SecurityZone.MyComputer)); 

//Now we can fire up an AppDomain running with that evidence. 
AppDomain domain = AppDomain.CreateDomain("YourDll.YourClass", evidence, setup); 

YourDll.YourClass yourclass = (YourDll.YourClass)domain.CreateInstanceAndUnwrap(typeof(YourDll.YourClass).Assembly.FullName, typeof(YourDll.YourClass).FullName); 

yourclass.CallYourMethod(); 

任何類型[序列化()],並且必須從MarshalByRefObject繼承而來。 例如:

namespace YourDll 
{ 
[Serializable()] 
public class YourClass: MarshalByRefObject 
{ 
...