1

在我们的 ASP.NET Web 应用程序中,我们有一个具有生命周期/范围的服务,可以描述为“每个请求的实例”,即该实例存储在HttpContext.Current.Items集合中。

在从 ASP.NET控件调用期间,我们遇到了这个间歇性问题HttpContext.Current。有时是,有时不是。登台网站上的行为与开发机器上的行为可能不同,甚至在不同的开发机器之间也有所不同。nullReportViewernull

这将导致想要使用我们的服务抛出异常的报告。

为什么是HttpContext.Current财产null

为什么是断断续续的?

4

1 回答 1

2

问题的根源似乎是报表查看器有时使用线程池线程来检索报表中定义的数据集的数据。线程池线程无法访问HttpContext.Current服务于 HTTP 请求的线程实例(更多信息在这篇博文中)。

我的场景中的报告在报告定义中有许多数据集,每个数据集对应于ObjectDataSource页面上定义的一个。经过大量调试后,我发现报表将在为 HTTP 请求提供服务的同一线程上检索报表定义中声明的第一个 DataSet 的数据。任何后续数据集都将主 HTTP 请求线程线程池线程上检索。然后,这些后续的 DataSet 会间歇性地抛出异常,说它HttpContext.Current为空。

似乎没有任何方法可以预测或控制在第一个数据集之后将在哪个线程上检索数据集。

于 2013-02-17T23:40:45.683 回答