我有一个非常离奇的情况。看来,当我将网页加载到浏览器时, 多个线程(至少2个)正在启动。该应用程序加载并运行正常 Windows XP盒子,但是当我尝试在我的Windows 8笔记本电脑上运行时,它似乎就是这样 不止一个启动事件正在发生并导致各种冲突。这个 Firefox和IE都在发生。
为了验证这种行为,我在一个类中放置了一个静态int,检查它是否为它 value大于零,如果是则抛出异常,然后递增int。
当然,抛出异常。
对此非常奇怪的是,没有涉及多线程/多任务处理 在我的应用程序中。
当我"触摸"网页的DLL(重建它),它正确呈现网页, 但是网页的来源("右键点击">"查看页面来源")有来源 对于未处理的异常网页,带有我的代码异常的消息 线程数大于零时抛出。
我尝试过创建一个新项目,然后将代码链接到它(Add Item ... Ad As Link), 然后建立它。它没有任何好处。
Win XP系统具有带有.NET 4.0的IIS 6,而Win 8笔记本电脑带有带有.NET 4.0的IIS 7.
语言是C#。
事实是,我对IIS几乎一无所知。
我希望比我更聪明的人(这并不是说得太多)知道什么 正在继续。
答案 0 :(得分:0)
看来,当我将网页加载到浏览器时,多个线程(至少2个)正在启动
也许一次初始化。我怀疑每个请求都会导致额外的两个线程留在那里。
似乎不止一个启动事件正在发生
正常此事件将针对正在创建的HttpApplication
的每个实例触发。这基本上是ASP.NET中的设计错误。他们认为汇集HttpApplication
个实例并为每个请求分配其中一个实例是个好主意。每个AppDomain有一个单例最好。自己写吧。像那样:
class MyGlobalAppState { ... }
static Lazy<MyGlobalAppState> state = new Lazy<...>(StateFactory);
请注意,Lazy<T>
存储任何异常并重新抛出它。这会导致您的应用在StateFactory
抛出的情况下永久中断。没有池重启,它永远不会恢复。这是Lazy<T>
中的设计错误。找到一种方法来解决这个问题。
但网页的来源(&#34;右键点击&#34;&gt;&#34;查看页面来源&#34;)包含未处理的例外网页的来源
某些浏览器会重新获取页面以查看来源。这可能很烦人或方便。
答案 1 :(得分:0)
很难说出导致此行为的原因,但正如其他人建议尝试使用Fiddler或任何其他http跟踪工具来查看发送的请求。
此外,Win XP应该运行IIS5.x而Win8应该运行IIS8。
默认情况下,IIS8 AppPool应该与集成管道一起运行,这可能会有不同的行为。我会尝试更改AppPool以使用Classic管道来查看它是否有所作为。