• 背景
 
今天接到客户的电话,说部署上去的项目树型的treeview无法正常显示,显示成了好几个大红叉。如:
  • 排查
 
于是我通过远程登录到服务器,在本地测试了一会发现没有这个问题存在,无论是通过IP地址、localhost或是127.0.0.1,treeview的图标都是可以正常访问的。
 
后来尝试了用域名的形式访问,就发现treeview的图标无法显示,而是以无法找到资源的大红叉代替。
 
在这里,就出现了这样的问题:在服务器部署成功,测试没问题时,通过域名的映射竟然会有所不同?
 
于是,打开查看源文件,发现treeview的图标是以
<a href="javascript:__doPostBack('OrgTree','tone0\\101')"><img src="/WebResource.axd?d=lGGrcXYTVjltmmHcco2Supo9tdUu0f434OBzmrYsJsNC93G2SEJwl0IBbEihwwiH91wr0uCxBKlHULSLKzmwe13uuDGp-nUJ0ydYs4WjZR3g92sp0&amp;t=635083448141708196" alt="折叠 表格下载" style="border-width:0;" /></a>
 
类似以上形式存在的。于是就对比了一下,通过IP地址访问WebResource.axd请求的资源正常;而通过域名的形式访问WebResource.axd请求的资源出现错误:
 
 

“/XXX”应用程序中的服务器错误。


远程服务器返回错误: (404) 未找到。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息:
System.Net.WebException: 远程服务器返回错误: (404) 未找到。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[WebException: 远程服务器返回错误: (404) 未找到。]
System.Net.HttpWebRequest.GetResponse() +5400333
DC.Web.HttpCompress.CompressWebResource.CompressResource(HttpContext context) +402
DC.Web.HttpCompress.HttpModule.context_EndRequest(Object sender, EventArgs e) +153
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75


版本信息: Microsoft .NET Framework 版本:2.0.50727.3649; ASP.NET
版本:2.0.50727.3657
 
 
  • 现场状况
为什么通过域名形式请求WebResource.axd资源会出现异常,从而导致treeview无法正常显示图标?
我分析如下:
1、应用系统使用了8080端口
2、客户的服务器内部网络,通过地址映射的形式nat到服务器的IP;
3、使用了二级域名对IP进行访问;
4、在ping域名得到的地址不是服务器实际的IP地址;
 
 
  • 猜想
有了以上的对现场状况的分析,我们可以推断以下结论或猜想:
1、可能网络应用安全网关的策略出了问题;
2、地址映射规则出了问题,导致通过域名访问资源时地址依然是没有映射前的IP;
3、微软通过WebResource.axd生成嵌入式资源的treeview图标的请求地址,大像攻击代码,被拦截了;
4、微软.net framework 2.0的bug的问题;
5、在启动网页压缩时出现问题如DC.Web.HttpCompress;
 
 
  • 解决方案
有了以上的分析结论或猜想,问题就不难解决了。
由于时间关系,也没有去深入研究,只认为既然WebResource.axd请求的资源有问题,那就不用微软提供的嵌入式资源吧,用自己的,我的资源我做主嘛;
 
于是添加了应用网站的主题,加入以下代码,问题就迎刃而解 :):
 
代码如下:
 
<asp:TreeView runat="server" ShowLines="True" LineImagesFolder="~/Images/Tree/" >
</asp:TreeView>
 

这里得注意一下,Tree目录上必须包括以下文件:

dashplus.gif、dashminus.gif、i.gif、l.gif、lminus.gif、lplus.gif、t.gif、tminus.gif、tplus.gif

 
 
 
  • 结论
1、不要过多的依赖微软,项目能不用WebResource就不用;
2、微软通过主题的思想,确实是了不起,避免了要修改N多个文件,只需要添加一个主题,指定默认主题即可;当然如果某一小菜,都在去掉主题并设置了treeview的属性,那也只能是杯具;
3、最近的苦水……,不说了。。。

asp.net之treeview无法显示树结点图标(IP与域名的表现竟不一样)的更多相关文章

  1. [置顶] ※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十四)

    结点: 包括一个数据元素及若干个指向其它子树的分支:例如,A,B,C,D等. 在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点. 在C语言 ...

  2. [LeetCode] Find Bottom Left Tree Value 寻找最左下树结点的值

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  3. 基于bootstrup treeview多级列表树插件

    <!doctype html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. Asp 解析 XML并分页显示

    Asp 解析 XML并分页显示 Asp 解析 XML并分页显示,演示样例源代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  5. C#上移,下移TreeView中的树节点顺序

    C#上移,下移TreeView中的树节点顺序 2009-08-12 20:10 1494人阅读 评论(2) 收藏 举报 c#buttonobjectnullstring C#中,通过单击上移,下移按钮 ...

  6. 动态更新Toolbar Menu以及Menu中同时显示文字和图标

    动态更新Toolbar Menu以及Menu中同时显示文字和图标 我们经常会有这样的需求,在切换Fragment或者点击某个按钮后动态更新Toolbar上Menu项.但是onCreateOptions ...

  7. favicon.ico显示,favicon显示,favicon图标显示

    favicon.ico显示,favicon显示,favicon图标显示 >>>>>>>>>>>>>>>> ...

  8. Windows Server 2012 R2在桌面上显示计算机/网络图标

    原文 Windows Server 2012 R2在桌面上显示计算机/网络图标 从Windows2012开始,微软取消了服务器桌面个性化选项,如何重新调出配置界面,可以使用微软命令调出.具体方法如下: ...

  9. Windows的任务管理器怎么显示进程的图标

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows的任务管理器怎么显示进程的图标.

随机推荐

  1. 优秀ASP.NET程序员修炼之路

    初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够.不全面. 写给机器的程序,往往追求的是运行正确.执行效率能满足要求.但程序员的任务仅仅 ...

  2. How Will Java Technology Change My Life?

    How Will Java Technology Change My Life? We can't promise you fame, fortune, or even a job if you le ...

  3. Csharp: Create Excel Workbook or word from a Template File using aspose.Word 14.5 and aspose.Cell 8.1

    winform: /// <summary> /// /// </summary> /// <param name="sender"></ ...

  4. 【Java每日一题】20161111

    package Nov2016; import java.io.Serializable; public class Ques1111 implements Serializable{ private ...

  5. MongoDB学习-安装流程

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  6. ThinkCMF-smeta扩展字段

    ThinkCMF - 添加文章功能 没有上传文件功能,为了扩展这一功能,在页面加入如下代码: <tr> <td> <div style="text-align: ...

  7. 比特币Bitcoin源代码安装编译

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }        比特币 (货币符号: ฿;英文名:Bitcoin;英文 ...

  8. C#语言的基础

    一.C#的引入 01..net和C#的区别 1)大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. 2).net ...

  9. IO复用_select函数

    select函数: #include <sys/select.h> #include <time.h> #include <sys/types.h> #includ ...

  10. Treed – 基于拖放 操作的,强大的树形编辑器

    Treed 是一个功能强大的树型编辑组件.Treed 使用 MVC 模式,简单的构造可以帮助你轻松创建一个完全不同的树形视图.您也可以创建自己的“节点”类,如果你想要做的不仅仅是单一的文本输入. 您可 ...