当前位置:编程学习 > C#/ASP.NET >>

一个页面sleep的时候!导致其它页面都打不开?不是基于多线程?

一个页面sleep的时候。导致其它页面都打不开?本地没问题。服务器上不行。
我把代码贴上来了。本地没问题。都能打开。但传到服务器上就出了这问题。
spier.cs 放在app_code下边
public static class Spider
{
    public static void a()
    {
        Thread.Sleep(20000);
    }
    public static void b()
    {
    }
}


test.aspx
public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["t"] != null)
        {
            Spider.a();
        }
        else
        {
            Spider.b();
        }
        Response.Write("a");
    }
}


代码就是这样。
测试网址为:http://www.cha55.org/test.aspx?t=x与http://www.cha55.org/test.aspx
目的很明显。但是在服务器上。只要打开有?t=x的网页。test.aspx只有等有?t=x的网页打开完了才显示。
但在本地却不是这样。实在搞不懂了。 --------------------编程问答-------------------- 我用IE6测试不会,用FF测试会有这种问题,可能两种浏览器发出的请求方式不同,后者导致
服务器把两个请求放在同一线程中,或者排队给同一线程了。 --------------------编程问答--------------------
引用 1 楼 newdigitime 的回复:
我用IE6测试不会,用FF测试会有这种问题,可能两种浏览器发出的请求方式不同,后者导致
服务器把两个请求放在同一线程中,或者排队给同一线程了。

我用ie8测试也有这个问题。但是应该不是这个问题。因为我把这个代码放在本地的iis上测试没有此现象!
--------------------编程问答-------------------- sleep是让当前线程阻塞一段时间。 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
sleep是让当前线程阻塞一段时间。

嗯。我就是这个意思。
http://www.cha55.org/test.aspx?t=x
那么阻塞也就阻塞这一次请求。当我在发起http://www.cha55.org/test.aspx就不该阻塞才对。但现在
http://www.cha55.org/test.aspx不该阻塞的也阻塞了。。。但地本又没问题。 --------------------编程问答-------------------- web的sleep阻的是整个application --------------------编程问答--------------------
引用 5 楼 sprc_lcl 的回复:
web的sleep阻的是整个application

不会吧。资料上不是说是基于多线程的莫?应该不会是基于单线程的吧。那类似csdn的高并发咋搞?而且那段代码在本地没有问题。
打?t=x后在打开不带参数的能马上返回。。就是想来看看有人遇到过同类问题没有 --------------------编程问答-------------------- 刚才试了。在一个朋友的机子上打开不会出现这个问题。。。应该是ie的事儿。但为啥本地上又不回? --------------------编程问答-------------------- 我又在虚拟机上试了一下。同一ip的不同客户端不会出现这个问题。。。 --------------------编程问答-------------------- sorry

是阻的同一个进程,比如你页面ctrl+n那个新打开的和原来的是应用的同一个ie进程

你可以重新打开一个IE进程来测试 --------------------编程问答-------------------- IIS什么版本?asp.net又是什么版本?
--------------------编程问答--------------------
引用 10 楼 sp1234 的回复:
IIS什么版本?asp.net又是什么版本?

本地上测试:本机iis7 ie8 虚拟机上测试windows2003 iis6 ie6
服务器上 iis6

我在本地上测试的时候用的是ie8。虚拟机上用的是ie6 服务器上是在本机ie8上直接浏览的。但我发现同一客户端就要阻塞。同一ip的不同客户端不会。 同一客户端但在本地测试也不会。
http://www.google.com.sg/search?hl=zh-CN&source=hp&q=ie%E6%9C%89%E8%AF%B7%E6%B1%82%E9%99%90%E5%88%B6&aq=f&aqi=&aql=&oq=&gs_易做图i=
我看看不知道有帮助没有。猛然想起以前了解过相关的知识样。但如果本地与服务器表现一样就好理解了。但问题是表现不一样。。。。 --------------------编程问答-------------------- Thread.Sleep是阻塞的当前线程,或者说当前主线程.

根据黑箱子法则,最终的问题只能是:
因不同浏览器发出的http请求数据(特别是header内容)不同,导致IIS把前后两个请求都划归给了一个线程来处理.你可以用相关工具查看一下不同浏览器发出的http数据有何区别.

不同的浏览器在这方面的区别还是很大的,譬如在不同浏览器下,往往会在session/sessionid /cookie方面有不同的表现.

你的这个问题的特殊之处在于:同一个人两次请求都是同一个aspx页面
--------------------编程问答-------------------- 友情帮顶。。。加油喽。。 --------------------编程问答-------------------- 我也有同样的问题..服务器后台一个单独的线程启动了...这个IIS就死掉了..页面也访问不了...同样求解...IIS6.0....NET2.0 --------------------编程问答--------------------
引用 14 楼 beckfun 的回复:
我也有同样的问题..服务器后台一个单独的线程启动了...这个IIS就死掉了..页面也访问不了...同样求解...IIS6.0....NET2.0
不是IIS死掉...服务器繁忙... --------------------编程问答--------------------
引用 12 楼 newdigitime 的回复:
Thread.Sleep是阻塞的当前线程,或者说当前主线程.

根据黑箱子法则,最终的问题只能是:
因不同浏览器发出的http请求数据(特别是header内容)不同,导致IIS把前后两个请求都划归给了一个线程来处理.你可以用相关工具查看一下不同浏览器发出的http数据有何区别.

不同的浏览器在这方面的区别还是很大的,譬如在不同浏览器下,往往会在session/sessionid /co……

我刚才了解一一下。ie好像有两个请求限制。我用另一个测试www.kd21.cn但不会出现这个问题。kd21是用目录的。不是在根目录下。估计有这个区别。我试看有没解决办法。有就发上来。然后结贴。和和。大家一起扩它。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,