• 背景
 
今天接到客户的电话,说部署上去的项目树型的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. Nancy 引用源码与NuGet安装差异

    使用NuGet安装Nancy和直接引用源码项目存在一些差异,如序列化,授权验证问题. 如果引用源码的话,自定义JsonSerializer,如下: 注意,需要使用NuGet安装Newtonsoft.J ...

  2. hibernate---注解--CascadeType属性

    cascade表示级联操作 CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象.对应EntityManager的merge方法 Cas ...

  3. android实现无限轮播

    1 在ViewPager的适配器中的getCount()长度设置无限大Integer.MAX_VALUE 2  明白当前currentIten 为position % images.length; 3 ...

  4. spring 使用redis集群配置

    上面两篇介绍了redis集群的配置合一些基本的概念,所以接下来当然是要在项目中使用咯,redis的java支持已经做的非常好了,所以我们来试着使用这些api来进行redis的操作,首先我们需要操作re ...

  5. 2015暑假多校联合---Assignment(优先队列)

    原题链接 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbere ...

  6. 项目总结笔记系列 wsTax KT Session1

     项目总结笔记 1.专有名词解释: SMO, Separate Management Office. UAT, User Accept Test. GSLB, Global Server Load B ...

  7. Array数组标准库

    概述 Array是JavaScript的内置对象,同时也是一个构造函数,可以用它生成新的数组. 作为构造函数时,Array可以接受参数,但是不同的参数,会使得Array产生不同的行为. 无参数时,返回 ...

  8. 【Effective Java】11、同步访问共享的可变数据

    这段时间看的部分感觉没啥需要记录下来的,个人也没什么想法,不过以后还是要多记,多写 package cn.xf.cp.ch02.item66; import java.util.concurrent. ...

  9. 精通 CSS 选择器

    CSS 选择器除了样式表匹配元素时需要用到,在使用 jQuery 等库的时候也可以利用 CSS 选择器来选择元素,因此作为前端开发需要熟练掌握.下面是一些常用的 CSS 选择器示例. 元素选择器 E, ...

  10. SharePoint 2013 直接给AD 组赋权限后,AD组里的用户还是登陆不了SharePoint,提示没有权限

    直接给一个all person的AD组赋了个read权限,然后将一个名为“all beijing”的组加到all person组里,但是all beijing组里的人却不能登录sharepoint,提 ...