• 博客园Blog程序中又一个奇怪问题


         这篇文章中只是描述了我在博客园Blog程序中遇到的问题以及我处理问题的一些想法,并没有提供解决方案,写出来希望能够给感兴趣的朋友一些参考,相然也希望得到一些建议。 : )
         在博客园服务器的应用程序事件日志,每天都有很多这样的警告与错误信息:
         警告:
    Event Type:    Warning
    Event Source:    ASP.NET 2.0.50727.0
        Event ID: 1073
    Description:
    Failed to process request.
    Exception: System.Web.HttpException
    Message: '/files/test/绠€鍗曠粨鏋勭ず鎰忓浘锛堝叚锛?jpg' is not a valid virtual path.
    StackTrace:    at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
       at System.Web.HttpRequest.get_FilePathObject()
       at System.Web.Security.CookielessHelperClass.RemoveCookielessValuesFromPath()
       at System.Web.HttpContext.Init(HttpRequest request, HttpResponse response)
       at System.Web.HttpContext..ctor(HttpWorkerRequest wr, Boolean initResponseWriter)
       at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
       at System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
       at System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
         错误:    
    Event Type:    Error
    Event Source:    ASP.NET 2.0.50727.0
    Event ID:    1091
    Description:
    Failed to execute request due to unknown error. Error: 0x80004005 Unspecified error  
         说明:
         1、在日志中,上面的警告信息先被记录,两个信息记录的时间在同一秒。
         2、在访问高峰期,每几分钟就会出现,也就是这个问题与ASP.NET2.0 运行时的负荷有关,ASP.NET2.0运行时太忙、太累的时候就容易出错。
         3、这两事件都是一起出现,说明是关联的,是由同一个原因引起的。
         4、从警告信息中可以看出,这个问题是url乱码引起的。
         对于这个问题,我觉得首先找到问题发生的地方是必要的,从警告信息中我们可以看出问题发生在VirtalPath中,VirtalPath是ASP.NET 2.0中一个很重要的类,只要与虚拟路径相关的操作,多多少少都会与VirtalPath有联系,遗憾的是这个类被internal保护,不能直接调用,不然在开发ASP.NET 2.0应用 程序时会很有帮助。(题外话:既然Reflector可以反编译源代码,通过反射也能调用,我觉得微软没必要用internal将那很多有用的类保护起来,开放出来,可以帮助.NET开发人员。)
         根据警告信息,用Reflector查看VirtalPath.Create(string virtualPath, VirtualPathOptions options)的代码,找出警告产生的源头,根据我的分析,应该是在下面的代码中产生的:
    if (virtualPath.IndexOfAny(VirtualPath.s_illegalVirtualPathChars) >= 0)
          {
                
    throw new HttpException(SR.GetString("Invalid_vpath"new object[] { virtualPath }));
          }
         由于url出现乱码,上面的代码在处理url时发现了非法字符,从而产生异常。
         而让人困惑的是,url怎么会乱码,由客户端浏览器产生的?但怎么出现问题的次数与访问量有关,而且大多数都是产生于对下载文件的访问,而且其中大多数是中文文件名,难道与通配符映射有关,难道是ASP.NET 2.0运行时在处理过程中造成了url乱码? 
  • 相关阅读:
    Git的commit your changes or stash them before you can merge
    php面试题汇总一(基础篇附答案)
    php面试题汇总二(基础篇附答案)
    php面试题汇总三(基础篇附答案)
    php面试题汇总四(基础篇附答案)
    nodejs 后台服务启动
    解决failed to push some refs to
    读书计划
    spring cloud 学习
    spring IOC
  • 原文地址:https://www.cnblogs.com/dudu/p/472745.html
Copyright © 2020-2023  润新知