6

Ho impostato una sottoscrizione in un'istanza di Reporting Services di SQL Server 2012 SP1 che esporta un file da 34 MB nell'estensione di rendering XLSX OpenSML di Excel 2007-2013. L'abbonamento genera il seguente errore:Eccezione di archiviazione isolata: impossibile determinare l'identità del dominio

System.IO.IsolatedStorage.IsolatedStorageException: impossibile determinare l'identità del dominio.

Ho verificato che è possibile esportare il report da Gestione report nell'estensione di rendering XLSX OpenXML Excel 2007-2013 senza problemi. Questo errore si verifica solo quando il report viene eseguito tramite una sottoscrizione. Ho studiato questo ed ha trovato le seguenti raccomandazioni sul web:

  1. due distinti bug Microsoft Connect rapporti 764356 e 764556 che non hanno arounds di lavoro quotate.

  2. Un consiglio per scaglionare gli abbonamenti in modo che solo una fila alla volta. Questo non aiuta poiché solo una sottoscrizione è in esecuzione al momento dell'errore.

  3. Un consiglio per utilizzare il metodo di rendering di Excel 2003 e suddividere le righe in separatori per evitare il limite di 65.536 righe. Ho verificato che funzioni, ma questa non era una soluzione accettabile dal punto di vista degli stakeholder aziendali.

  4. Un commento che indica qualsiasi rapporto che utilizza il metodo di rendering Excel 2007-2013 che supera i 10 MB di dimensione passa da essere generato in memoria all'utilizzo di Archiviazione isolata. Non c'è alcuna spiegazione del perché questo sia sbagliato e presumo che ciò sia stato fatto per una buona ragione, forse per limitare il consumo di RAM.

  5. Un suggerimento per elevare le autorizzazioni per gli utenti nella cartella di archiviazione isolata per l'applicazione ASP.NET. Non ho trovato dove si trova la cartella di archiviazione isolata per Reporting Services.

  6. Un suggerimento per racchiudere il codice ASP.NET per Archiviazione isolata con codice aggiuntivo che supera questo problema. Non è stato possibile trovare un modo per applicare questa soluzione a Reporting Services poiché si tratta di un prodotto spedito da Microsoft.

  7. Un suggerimento per modificare i file web.config di Gestione report e Report Server per includere maxRequestLength = "200000" nel nodo httpRuntime. Questo non ha cambiato i risultati.

  8. Un suggerimento per aumentare esplicitamente le impostazioni di memoria in RSReportServer.config. Questo non sembrava essere d'aiuto poiché l'errore si riferisce a Storage isolato, ma l'ho provato per mancanza di spazio. Questo non ha cambiato i risultati.

  9. Un suggerimento per modificare il valore di DatabaseQueryTimeout da 120 a qualcosa di più grande. Questo non ha cambiato i risultati.

  10. Un suggerimento per modificare il valore di timeout di esecuzione della sottoscrizione. Questo non ha cambiato i risultati.

Qui di seguito è una copia della voce di registro di errore completo:

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

Purtroppo sembra aver trovato un bug o limitazione dei servizi di reporting di Excel renderer (anche se è possibile generare il report tramite Gestione report allora suona come un insetto per me). 34 MB è un rapporto di foglio di calcolo abbastanza grande. Si tratta di un report o è un estratto di dati? Può essere esportato come CSV anziché in formato Excel? Potresti usare SSIS per esportare i dati in un foglio di calcolo? – Nathan

+0

Ho aggiornato i bug Connect per includere informazioni da questa domanda. Ho risolto questo problema interrompendo il report tramite l'URL ReportServer in un'attività di script del pacchetto SSIS. –

risposta

4

Si può trovare una soluzione qui: http://rekiwi.blogspot.com/2008/12/unable-to-determine-identity-of-domain.html

Nella componente COM, creare un nuovo dominio di applicazione con le prove appropriate ed esegui il codice in questo.

Ecco un esempio di codice che ha risolto il problema per me:

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(); 

Qualsiasi tipo si vuole marshall attraverso AppDomain devono marcata [Serializable()] e deve ereditare da MarshalByRefObject. Per esempio:

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