sql-server - 隔离存储异常: Unable to determine the identity of domain

标签 sql-server reporting-services sql-server-2012 reportserver

我在 SQL Server 2012 SP1 Reporting Services 实例中设置了订阅,该实例将 34MB 文件导出到 Excel 2007-2013 XLSX OpenXML 渲染扩展。订阅抛出以下错误:

System.IO.IsolatedStorage.IsolatedStorageException:无法确定域的身份。

我验证了可以毫无问题地将报表从报表管理器导出到 Excel 2007-2013 XLSX OpenXML 渲染扩展。仅当通过订阅执行报表时才会出现此错误。我对此进行了研究,并在网上找到了以下建议:

  1. 两个单独的 Microsoft Connect 错误报告 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 

最佳答案

您可以在这里找到解决方案: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();

您想要跨 AppDomain 编码的任何类型都必须标记为 [Serialized()],并且必须从 MarshalByRefObject 继承。 例如:

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

关于sql-server - 隔离存储异常: Unable to determine the identity of domain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795458/

相关文章:

excel - 将 Excel 列转换为 SSRS(英寸或 pt)

c# - 回滚 C# 中的临时数据库更改

sql - 用户定义的函数 SQL Server 2005 被错误地标记为非确定性?

sql - 在 SQL Server 中使用表变量参数优化存储过程的最佳方法是什么?

reporting-services - SSRS 2008 R2 导出到 Excel 将第一行留空

c# - 打印由 Microsoft Report Viewer 生成的报告

java - Android中sqlite和sql server(crud操作)两种方式同步

sql - 索引 View 与表上的索引

sql - SQL Server 中的 LIKE 运算符未按预期工作

sql - 查询以获取两个字符串之间的共同词