• 背景
 
今天接到客户的电话,说部署上去的项目树型的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. SQL Pretty Printer-不错的SQL格式化工具

    前言 好长时间没有写过博客了,人变懒了很多,应该说本来也不怎么勤快.但今天为了这个工具,必须得勤快一下了,天下真的没有免费的午餐. 之前使用过sql server 2000的查询设计器和Toad fo ...

  2. Android使用SQLite数据库(4)

    读取SQLite数据库中的字符串字段,使用Cursor的getString方法(其他类型的字段也有相应的读取方法): public abstract String getString (int col ...

  3. 【Java每日一题】20161206

    package Dec2016; public class Ques1206 { public static void main(String[] args){ doSex(null); } publ ...

  4. mysql中变量赋值

    http://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html sql server中变量要先申明后赋值: 局部变量用一个@标识,全局变 ...

  5. 最新微信公众平台js sdk整合PHP版

    由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa1 ...

  6. 2014 ICPC---Relief grain(树链剖分)

    原题链接 Problem Description The soil is cracking up because of the drought and the rabbit kingdom is fa ...

  7. adb 常用命令总结

    1. adb / adb -help 使用帮助 2. adb devices 查看连接到电脑的设备 3. adb install example.apk 安装程序 4. adb -s emulator ...

  8. 代理模式的java实现

    1.  简介 代理模式(Proxy Pattern)是常用设计模式之一.代理模式的定义:Provide a surrogate or placeholder for another object to ...

  9. jstl标签

    为什么提出jstl标签? Jsp中包含html标签+java片段+jsp片段使得jsp页面比较乱.提出:能不能把<% %>java片段用标签替换 jsp页面更简洁 <!-- 引入js ...

  10. Riot - 比 Facebook React 更轻量的 UI 库

    Riot 是一个类似 Facebook React 的用户界面库,只有3.5KB,非常轻量.支持IE8+浏览器的自定义标签,虚拟 DOM,语法简洁.Riot 给前端开发人员提供了除 React 和 P ...