none
ASPX页面为什么偶尔会显示部署时候的数据呢? RRS feed

  • 问题

  • ASPX页面为什么偶尔会显示部署时候的数据呢?比如系统是在3月18日的时候部署的,系统为Windows 2003+IIS6+asp.net2.0,但是4月11日的时候突然显示3月18日的内容,这是为什么呢?
    2009年4月11日 17:06

答案

  • 造成此类问题一般是一下问题:
    1,缓存,包括客户端的缓存和服务器端的缓存,客户端的缓存是可以采用Ctrl+F5强制刷新看看是否此现象是否还发生,客户端还包含代理服务器上进行的缓存。服务器端的缓存检查是否某个地方的代码写死了,发布的时候没有修改回来。如果是重启机器还是出现那个特定日期的数据,则很可能是这种问题
    2,.net中的static类型的东西用的时候要小心,
    3,对于出现问题的那个页面,更改一下文件名重新发布看看是否还会出现
    4,在出现此问题时,换一个地方查看,比如换个联通的网络或者电信的网络看看是否依旧发生。
    5,是偶尔发生还是过一段时间必然发生?要找出出现问题的规律
    6,自己审查你的业务逻辑上不会造成此问题发生

    孟宪会
    2009年4月13日 5:58
    版主

全部回复

  • 楼主,你好,你的问题,不是很明白,能否再阐述否,
    如果,页面显示的数据不是最新的,先检查一下数据库里面数据。
    jon.valett@gmail.com
    2009年4月11日 17:19
    版主
  • 你好,数据库里的数据是最新的,而且是每天都更新的。

    是这样的,我写了一个ascx控件,里面需要提供参数,具体代码如下:
    <%@ Control Language="C#" ClassName="NewsListForDefaultByNewsClassForQinghai" %>
    <%@ Import Namespace= "Mjb.Vod.Model"%>
    <%@ Import Namespace= "Mjb.Vod.Provider"%>

    <script runat="server">

        private string _NewsClassId;

        public string NewsClassId
        {
            get { return this._NewsClassId; }
            set { this._NewsClassId = value; }
        }

        private bool _IsImage;
        public bool IsImage
        {
            get { return this._IsImage; }
            set { this._IsImage = value; }
           
        }
        private bool _ShowImageAndWord;
        public bool ShowImageAndWord
        {
            get { return this._ShowImageAndWord; }
            set { this._ShowImageAndWord = value; }
        }

        private int _TitleLength = 0;
        public int TitleLength
        {
            get { return this._TitleLength; }
            set { this._TitleLength = value; }
        }
        private NewsList _NewsList;
        private News _PicNews;
        private NewsProvider _Provider;
        private NewsClass _CurrentNewsClass;
        protected void Page_Load(object sender, EventArgs e)
        {
            _Provider = new NewsProvider();
            _CurrentNewsClass = new NewsClass(this._NewsClassId);
            _NewsList = _Provider.GetNewsListForNormalUser(this._NewsClassId, VodManage.GetCurrentAccount(this.Context), _CurrentNewsClass.nc_indexPageViewCount, true, _CurrentNewsClass.nc_indexNewsDelayDays);
         
            if (_IsImage)
            {
              NewsList _PicNewsList = _Provider.GetPictureNewsListForNormalUser(_NewsClassId, VodManage.GetCurrentAccount(this.Context), 1);
              if (_PicNewsList != null && _PicNewsList.Count > 0)
              {
                  _PicNews = _PicNewsList[0];
              }
            }     
        }
    </script>

            <%if(_IsImage&&_PicNews!=null&&!string.IsNullOrEmpty(_PicNews.nws_pictureFileName)){
                  string picURL = VodManage.GetRealPictureURL(_PicNews.nws_pictureFileName);
                  string url = Tool.UrlBase(Request) + "CreatePlayerHandler.ashx?nws_id=" + _PicNews.nws_id + "&nc_id=" + _PicNews.nws_newsClass;
                  if(_ShowImageAndWord){%>
            <div class="newPic">
              <div> <a onclick="getMediaUrl(' <%=url %>');promptInfo(' <%=Server.HtmlEncode(_PicNews.nws_title) %>');" style="cursor:pointer;"> <img src=" <%=picURL %>" alt=" <%=_PicNews.nws_title %>" border="0" align="left"  width="100px" height="75px"/> </a> </div>
              <div class="newtitle"> <%
                  if (_TitleLength > 0)
                  {
                      Response.Write(Mjb.ApplicationFx.Tools.getLimitedstring(_PicNews.nws_title, _TitleLength));
                  }
                  else
                  {
                     
                      Response.Write(_PicNews.nws_title);
                  }
                  %> </div>
              <div class="buColor"> <%=_PicNews.nws_submitTime.Value.ToString("yyyy-MM-dd") %> </div>
            </div>
            <%}else{ %>
            <div class="pic"> <a onclick="getMediaUrl(' <%=url %>');promptInfo(' <%=Server.HtmlEncode(_PicNews.nws_title) %>');" style="cursor:pointer;"> <img src=" <%=picURL %>" alt=" <%=_PicNews.nws_title %>" width="270" height="70" border="0" /> </a> </div>
            <%}
              }%>
            <ul class="listItem">
            <%if (VodManage.CheckClassNeedLogin(_NewsClassId) && VodManage.GetCurrentAccount(this.Context) == null)
      {Response.Write("必须登录才能观看!");} else{%>
            <%foreach (News news in this._NewsList)
              {
                  string url = Tool.UrlBase(Request) + "CreatePlayerHandler.ashx?nws_id=" + news.nws_id + "&nc_id=" + news.nws_newsClass;
                  %>
              <li> <a onclick="getMediaUrl(' <%=url %>');promptInfo(' <%=Server.HtmlEncode(news.nws_title) %>');" style="cursor:pointer;" title=" <%= news.nws_title %>">
              <%
                  if (_TitleLength > 0)
                  {
                      Response.Write(Mjb.ApplicationFx.Tools.getLimitedstring(news.nws_title, _TitleLength));
                  }
                  else
                  {
                     
                      Response.Write(news.nws_title);
                  }
                  %> </a> </li>
              <%} %>
                        <%} %>
              <li style="float:right;"> <a href="NewsList.aspx?nc_id= <%=_NewsClassId %>">更多>>>> </a> </li>
            </ul>
     
    在首页上有大约10处需要调用它。调用代码如下:
    <vod:NewsListForDefaultByNewsClass ID="NewsListForDefaultByNewsClass7" NewsClassId="jingzhongchangming" IsImage="true" ShowImageAndWord = "true" runat="server" TitleLength = 20 />
    奇怪的时候这10处调用它的地方,有的地方正常显示,有的地方却显示以前的数据,而且页面上其他地方的数据显示是正常的。

    2009年4月11日 17:47
  • 把页面缓存关掉再试试。
    2009年4月12日 0:21
  • 我这个没有开启页面缓存啊。是不是服务器缓存造成的啊?我让它生成静态页面的时候,有时候也会生成的是部署的那个时候的数据。

    2009年4月12日 0:48
  • 我注意到你说部署这个字眼,如果有缓存,也会因为时间关系,偶尔更新,但是你这里只显示部署时的数据,
    很明显,是数据的初始化处问题了,大部分是因为使用了静态字段,你检查一下。

    比如,你在App_Code目录下定义一个类,
    public static class Globals
    {
        public static string ThemesSelectorID = GetThemesSelectorIDFromDatabase();
    }

    注意,ThemesSelectorID是不会因为你的数据库的值改变了,而改变,它的值一直是部署时候的值,因为它只执行了一次初始化,不会每次都去读取数据库。

    事例提供参考,跟你的情况可能有所不同,可以从这个角度来考虑问题。
    jon.valett@gmail.com
    2009年4月12日 3:36
    版主
  • 这是在不同客户端不同浏览器上都可以复现的,还是仅仅是在一台机器上看到?有可能只是客户端缓存。
    Microsoft ASP.NET MVP
    2009年4月12日 3:45
    版主
  • 这是在不同客户端不同浏览器上都可以复现的,还是仅仅是在一台机器上看到?有可能只是客户端缓存。
    Microsoft ASP.NET MVP

    所有的客户端都是这样的。以前由于生成静态页面的时候经常出现这个问题,所以现在不生成静态页面,还是这样的。
    2009年4月12日 4:00
  • 我注意到你说部署这个字眼,如果有缓存,也会因为时间关系,偶尔更新,但是你这里只显示部署时的数据,
    很明显,是数据的初始化处问题了,大部分是因为使用了静态字段,你检查一下。

    比如,你在App_Code目录下定义一个类,
    public static class Globals
    {
        public static string ThemesSelectorID = GetThemesSelectorIDFromDatabase();
    }

    注意,ThemesSelectorID是不会因为你的数据库的值改变了,而改变,它的值一直是部署时候的值,因为它只执行了一次初始化,不会每次都去读取数据库。

    事例提供参考,跟你的情况可能有所不同,可以从这个角度来考虑问题。
    jon.valett@gmail.com
    关于获取新闻列表不可能使用静态字段,因为这个需要实时更新的。
    在就是你说的那个,我的里面没有使用静态类。
    而且即使使用了静态类应该重新启动服务器之后会更新的,这么长的时间内我们重新启动过很多次服务器或者IIS,应该是更新的了,但是不至于显示部署那天的数据啊。
    2009年4月12日 4:04
  • 楼主,你好,如果是这样,可能需要单步调试,分析一下,不知,你能否提供代码。
    jon.valett@gmail.com
    2009年4月12日 4:12
    版主
  • protected void Page_Load(object sender, EventArgs e)
    {
    Response.Expires =-1;
    }
    孟宪会
    2009年4月12日 5:37
    版主
  • protected void Page_Load(object sender, EventArgs e)
    {
    Response.Expires =-1;
    }
    孟宪会

    这个是在ascx文件里面设置还是在aspx里面设置呢?
    2009年4月12日 9:02
  • 都一样,在ascx文件里面,每个页面调用都会执行,在aspx里面,只执行一次。
    jon.valett@gmail.com
    2009年4月12日 11:14
    版主
  • 都一样,在ascx文件里面,每个页面调用都会执行,在aspx里面,只执行一次。
    jon.valett@gmail.com

    现在弄不明白的是,为什么在一个页面上的同一个用户控件,有的正常有的不正常呢?
    2009年4月12日 12:01
  • 都一样,在ascx文件里面,每个页面调用都会执行,在aspx里面,只执行一次。
    jon.valett@gmail.com

    现在弄不明白的是,为什么在一个页面上的同一个用户控件,有的正常有的不正常呢?
    提供代码,帮你调试一下。
    jon.valett@gmail.com
    2009年4月12日 14:33
    版主
  • 调试状态下是不会出现这个问题的,到客户那里运行一段时间才会出现。
    2009年4月12日 16:07
  • 造成此类问题一般是一下问题:
    1,缓存,包括客户端的缓存和服务器端的缓存,客户端的缓存是可以采用Ctrl+F5强制刷新看看是否此现象是否还发生,客户端还包含代理服务器上进行的缓存。服务器端的缓存检查是否某个地方的代码写死了,发布的时候没有修改回来。如果是重启机器还是出现那个特定日期的数据,则很可能是这种问题
    2,.net中的static类型的东西用的时候要小心,
    3,对于出现问题的那个页面,更改一下文件名重新发布看看是否还会出现
    4,在出现此问题时,换一个地方查看,比如换个联通的网络或者电信的网络看看是否依旧发生。
    5,是偶尔发生还是过一段时间必然发生?要找出出现问题的规律
    6,自己审查你的业务逻辑上不会造成此问题发生

    孟宪会
    2009年4月13日 5:58
    版主
  • 造成此类问题一般是一下问题:
    1,缓存,包括客户端的缓存和服务器端的缓存,客户端的缓存是可以采用Ctrl+F5强制刷新看看是否此现象是否还发生,客户端还包含代理服务器上进行的缓存。服务器端的缓存检查是否某个地方的代码写死了,发布的时候没有修改回来。如果是重启机器还是出现那个特定日期的数据,则很可能是这种问题
    2,.net中的static类型的东西用的时候要小心,
    3,对于出现问题的那个页面,更改一下文件名重新发布看看是否还会出现
    4,在出现此问题时,换一个地方查看,比如换个联通的网络或者电信的网络看看是否依旧发生。
    5,是偶尔发生还是过一段时间必然发生?要找出出现问题的规律
    6,自己审查你的业务逻辑上不会造成此问题发生

    孟宪会

    谢谢孟老师。
    2009年4月13日 7:26
  • 又出现这个问题了,这次出现问题的是在我写的一个客户端添加工具添加数据之后就出现这个问题。简直要疯狂了。


    但是过了大约半个小时后自己又好了。奇了怪了!!!!!!!!!!!!!!!!!!!

    • 已编辑 maclessmjb 2009年4月13日 16:18 问题补充
    2009年4月13日 15:54