最近公司在接入整理单点登录方案的时候,选择了CAS方案,实际版本采用了4.0。当我们把服务端附属完毕,基于.NET平台Web版的客户端DotNetCasClient进行定制化修改后,在测试环境通过。然而在正式生产环境下面出现了DotNetCasClient加载失败的提示,一看之下很纳闷,因为DotNetCasClient.dll已经添加引用了,这是为何呢?下面我们就来具体进行分析。、

  1.首先分析我们站点IIS部署情况,部署了一个web站点,并在站点下面挂在了一个虚拟站点,这个虚拟站点直向的使我们的资源文件。我们再看淡点接入是否Ok呢?在我们的开发以及测试环境下登录退出等似乎都没有问题,可以在访问我们的系统资源文件的时候报错了。起初先考虑难道是我们DotNetCasClient配置的时候需要过滤,针对静态资源访问的时候,听起来好像是这个道理,随后进行问题排查的时候,好像跟这个没有关系,那么问题出在哪里呢?

  2.这时我们再回头想想下,既然提示加载失败,要么这个文件找不到,要么这个文件的依赖找不到。那会不会是依赖文件缺失了呢?于是里面里面检查DotNetCasClient源码,观察引用依赖,发现也没有特殊的依赖,说明这个跟程序集依赖是没有关系的。

  3.这是回头想想我们的静态资源的发布形式,是通过虚拟站点挂在在主站点下面,而虚拟站点相当于一个独立的站点,这是想到了,虽然我们的主站点里面有了DotNetCasClient.dll引用,但是我们的虚拟站点里面没有这个引用,想到这儿,行动了,在虚拟站点根目录新建了bin文件夹,并把DotNetCasClient.dll拷贝进去。刷新网站通了,收工。

  4.为了避免静态资源访问权限问题给虚拟站点添加了相关权限控制,就这样搞定。

  总结:

  1.场景再现以及异常再现

  2.排查可能存在并发生异常的地方

  3.根据DotNetCasClient的执行机制,以及IIS站点部署实际场景具体排查缩小范围

  4.为防止可能存在的访问阻碍因素,添加访问权限控制

05-11 21:52